Calculation of Common Tangent Length
2012-05-06 14:09
This GeoGebra example demonstrates how to calculate the length of common tangents between two circles. By constructing two circles and their common tangents, it utilizes the geometric property that a tangent is perpendicular to the radius at the point of tangency. Combined with the Pythagorean theorem, it dynamically illustrates the derivation and calculation process of the common tangent length.
Loading the GeoGebra board and drawing, please wait…
<?xml version="1.0" encoding="utf-8"?>
<geogebra format="4.0" id="98a45c31-8755-4ebd-b3f5-188d0378ed0d" xsi:noNamespaceSchemaLocation="http://www.geogebra.org/ggb.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<gui>
<window width="1368" height="767" />
<perspectives>
<perspective id="tmp">
<panes>
<pane location="" divider="0.12207602339181287" orientation="1" />
</panes>
<views>
<view id="4" toolbar="0 || 2020 , 2021 , 2022 , 66 || 2001 , 2003 , 2002 , 2004 , 2005 || 2040 , 2041 , 2042 , 2044 , 2043" visible="false" inframe="false" stylebar="false" location="1,1" size="300" window="100,100,600,400" />
<view id="1" visible="true" inframe="false" stylebar="false" location="1" size="1366" window="100,100,600,400" />
<view id="2" visible="false" inframe="false" stylebar="false" location="3" size="167" window="100,100,250,400" />
<view id="16" visible="false" inframe="true" stylebar="false" location="1" size="150" window="50,50,500,500" />
<view id="32" visible="false" inframe="true" stylebar="true" location="1" size="150" window="50,50,500,500" />
<view id="64" visible="false" inframe="true" stylebar="false" location="1" size="150" window="50,50,500,500" />
</views>
<toolbar show="true" items="0 39 59 || 1 501 67 , 5 19 , 72 | 2 15 45 , 18 65 , 7 37 | 4 3 8 9 , 13 44 , 58 , 47 || 16 51 64 , 70 | 10 34 53 11 , 24 20 22 , 21 23 | 55 56 57 , 12 || 36 46 , 38 49 50 , 71 | 30 29 54 32 31 33 | 17 26 62 , 14 66 68 | 25 52 60 61 || 40 41 42 , 27 28 35 , 6" />
<input show="true" cmd="true" top="false" />
</perspective>
</perspectives>
<labelingStyle val="3"/>
<font size="12"/>
<graphicsSettings javaLatexFonts="false"/>
<consProtColumns col0="true" col1="true" col2="false" col3="true" col4="false" col5="true" col6="true" col7="false"/>
<consProtocol useColors="true" addIcons="false" showOnlyBreakpoints="false"/>
</gui>
<euclidianView>
<size width="1366" height="601"/>
<coordSystem xZero="215.0" yZero="315.00000000000006" scale="49.99999999999999" yscale="50.00000000000001"/>
<evSettings axes="false" grid="false" gridIsBold="false" pointCapturing="3" rightAngleStyle="1" checkboxSize="13" gridType="0"/>
<bgColor r="255" g="255" b="255"/>
<axesColor r="0" g="0" b="0"/>
<gridColor r="192" g="192" b="192"/>
<lineStyle axes="1" grid="10"/>
<axis id="0" show="false" label="" unitLabel="" tickStyle="1" showNumbers="true"/>
<axis id="1" show="false" label="" unitLabel="" tickStyle="1" showNumbers="true"/>
</euclidianView>
<kernel>
<continuous val="false"/>
<decimals val="2"/>
<angleUnit val="degree"/>
<algebraStyle val="0"/>
<coordStyle val="0"/>
<angleFromInvTrig val="false"/>
</kernel>
<scripting blocked="false" disabled="false"/>
<construction title="" author="" date="">
<element type="point" label="A">
<show object="false" label="true"/>
<objColor r="0" g="0" b="255" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<animation step="0.1" speed="1" type="1" playing="false"/>
<coords x="-0.7" y="-0.48" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Point">
<input a0="Circle[A, 10]"/>
<output a0="B"/>
</command>
<element type="point" label="B">
<show object="false" label="true"/>
<objColor r="125" g="125" b="255" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<animation step="1" speed="1" type="1" playing="false"/>
<coords x="9.3" y="-0.48" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Segment">
<input a0="A" a1="B"/>
<output a0="a"/>
</command>
<element type="segment" label="a">
<show object="true" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="0.0" y="10.0" z="4.800000000000001"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eqnStyle style="implicit"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<element type="numeric" label="b">
<value val="1.4"/>
<show object="true" label="true"/>
<objColor r="0" g="0" b="0" alpha="0.1"/>
<layer val="0"/>
<labelMode val="1"/>
<slider min="0" max="5" absoluteScreenLocation="true" width="100.0" x="18.0" y="38.0" fixed="true" horizontal="true"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<animation step="0.1" speed="1" type="0" playing="false"/>
</element>
<element type="numeric" label="c">
<value val="0.9"/>
<show object="true" label="true"/>
<objColor r="0" g="0" b="0" alpha="0.1"/>
<layer val="0"/>
<labelMode val="1"/>
<slider min="0" max="5" absoluteScreenLocation="true" width="100.0" x="152.0" y="40.0" fixed="true" horizontal="true"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<animation step="0.1" speed="1" type="0" playing="false"/>
</element>
<command name="Circle">
<input a0="A" a1="b"/>
<output a0="d"/>
</command>
<element type="conic" label="d">
<show object="false" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eigenvectors x0="1.0" y0="0.0" z0="1.0" x1="-0.0" y1="1.0" z1="1.0"/>
<matrix A0="1.0" A1="1.0" A2="-1.2395999999999998" A3="0.0" A4="0.7" A5="0.48"/>
<eqnStyle style="specific"/>
</element>
<command name="Circle">
<input a0="B" a1="c"/>
<output a0="e"/>
</command>
<element type="conic" label="e">
<show object="false" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eigenvectors x0="1.0" y0="0.0" z0="1.0" x1="-0.0" y1="1.0" z1="1.0"/>
<matrix A0="1.0" A1="1.0" A2="85.91040000000001" A3="0.0" A4="-9.3" A5="0.48"/>
<eqnStyle style="specific"/>
</element>
<command name="Intersect">
<input a0="d" a1="a" a2="1"/>
<output a0="C"/>
</command>
<element type="point" label="C">
<show object="true" label="true"/>
<objColor r="64" g="64" b="64" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="-14" y="22"/>
<labelMode val="0"/>
<coords x="0.7" y="-0.4800000000000001" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Intersect">
<input a0="e" a1="a" a2="1"/>
<output a0="D"/>
</command>
<element type="point" label="D">
<show object="true" label="true"/>
<objColor r="64" g="64" b="64" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="-2" y="22"/>
<labelMode val="0"/>
<coords x="8.4" y="-0.4800000000000001" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<element type="numeric" label="r_1">
<value val="2.0"/>
<show object="true" label="true"/>
<objColor r="0" g="0" b="0" alpha="0.1"/>
<layer val="0"/>
<labelMode val="1"/>
<slider min="0" max="5" absoluteScreenLocation="true" width="100.0" x="13.0" y="85.0" fixed="true" horizontal="true"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<animation step="0.1" speed="1" type="0" playing="false"/>
</element>
<element type="numeric" label="r_2">
<value val="1.2"/>
<show object="true" label="true"/>
<objColor r="0" g="0" b="0" alpha="0.1"/>
<layer val="0"/>
<labelMode val="1"/>
<slider min="0" max="5" absoluteScreenLocation="true" width="100.0" x="152.0" y="87.0" fixed="true" horizontal="true"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<animation step="0.1" speed="1" type="0" playing="false"/>
</element>
<command name="Circle">
<input a0="C" a1="r_1"/>
<output a0="f"/>
</command>
<element type="conic" label="f">
<show object="true" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eigenvectors x0="1.0" y0="0.0" z0="1.0" x1="-0.0" y1="1.0" z1="1.0"/>
<matrix A0="1.0" A1="1.0" A2="-3.2796000000000003" A3="0.0" A4="-0.7" A5="0.4800000000000001"/>
<eqnStyle style="specific"/>
</element>
<command name="Circle">
<input a0="D" a1="r_2"/>
<output a0="g"/>
</command>
<element type="conic" label="g">
<show object="true" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eigenvectors x0="1.0" y0="0.0" z0="1.0" x1="-0.0" y1="1.0" z1="1.0"/>
<matrix A0="1.0" A1="1.0" A2="69.35040000000001" A3="0.0" A4="-8.4" A5="0.4800000000000001"/>
<eqnStyle style="specific"/>
</element>
<command name="Tangent">
<input a0="f" a1="g"/>
<output a0="h" a1="i" a2="j" a3="k"/>
</command>
<element type="line" label="h">
<show object="true" label="false"/>
<condition showObject="o"/>
<objColor r="0" g="51" b="255" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="-1.9891763115372252" y="-19.04220779220779" z="30.543807674907896"/>
<lineStyle thickness="3" type="20" typeHidden="1"/>
<eqnStyle style="implicit"/>
</element>
<element type="line" label="i">
<show object="true" label="false"/>
<condition showObject="o"/>
<objColor r="0" g="51" b="255" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="1.9891763115372252" y="-19.04220779220779" z="-48.82432715542739"/>
<lineStyle thickness="3" type="20" typeHidden="1"/>
<eqnStyle style="implicit"/>
</element>
<element type="line" label="j">
<show object="true" label="false"/>
<condition showObject="p"/>
<objColor r="153" g="0" b="102" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="1.0914655352660638" y="2.3887987012986995" z="-4.8700803865308"/>
<lineStyle thickness="3" type="20" typeHidden="1"/>
<eqnStyle style="implicit"/>
</element>
<element type="line" label="k">
<show object="true" label="false"/>
<condition showObject="p"/>
<objColor r="153" g="0" b="102" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="-1.0914655352660634" y="2.3887987012986995" z="7.163327139777551"/>
<lineStyle thickness="3" type="20" typeHidden="1"/>
<eqnStyle style="implicit"/>
</element>
<command name="Intersect">
<input a0="f" a1="h"/>
<output a0="E" a1=""/>
</command>
<element type="point" label="E">
<show object="true" label="true"/>
<condition showObject="o ≟ true"/>
<objColor r="64" g="64" b="64" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="0.9077922077922077" y="1.509176311537225" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Intersect">
<input a0="g" a1="h"/>
<output a0="F" a1=""/>
</command>
<element type="point" label="F">
<show object="true" label="true"/>
<condition showObject="o ≟ true"/>
<objColor r="64" g="64" b="64" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="8.524675324675325" y="0.7135057869223348" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Segment">
<input a0="E" a1="C"/>
<output a0="l"/>
</command>
<element type="segment" label="l">
<show object="true" label="false"/>
<condition showObject="o ≟ true"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="1.989176311537225" y="-0.20779220779220775" z="-1.4921636778163172"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eqnStyle style="implicit"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<command name="Segment">
<input a0="F" a1="D"/>
<output a0="m"/>
</command>
<element type="segment" label="m">
<show object="true" label="false"/>
<condition showObject="o ≟ true"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="1.1935057869223349" y="-0.12467532467532472" z="-10.08529276599177"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eqnStyle style="implicit"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<command name="OrthogonalLine">
<input a0="D" a1="l"/>
<output a0="n"/>
</command>
<element type="line" label="n">
<show object="true" label="false"/>
<condition showObject="o ≟ true"/>
<objColor r="255" g="153" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="0.20779220779220775" y="1.989176311537225" z="-0.790649915916677"/>
<lineStyle thickness="3" type="0" typeHidden="1"/>
<eqnStyle style="implicit"/>
</element>
<command name="Intersect">
<input a0="n" a1="l"/>
<output a0="G"/>
</command>
<element type="point" label="G">
<show object="true" label="true"/>
<condition showObject="o ≟ true"/>
<objColor r="64" g="64" b="64" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="-20" y="16"/>
<labelMode val="0"/>
<coords x="3.1324675324675315" y="1.2626820984595595" z="3.999999999999999"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<element type="boolean" label="o">
<value val="false"/>
<show object="true" label="true"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="358" y="8"/>
<labelMode val="0"/>
<caption val="外公切線"/>
</element>
<element type="boolean" label="p">
<value val="true"/>
<show object="true" label="true"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="358" y="74"/>
<labelMode val="0"/>
<caption val="內公切線"/>
</element>
<command name="Angle">
<input a0="D" a1="G" a2="E"/>
<output a0="α"/>
</command>
<element type="angle" label="α">
<value val="1.5707963267948968"/>
<show object="true" label="true"/>
<condition showObject="o ≟ true"/>
<objColor r="0" g="100" b="0" alpha="0.1"/>
<layer val="0"/>
<labelOffset x="16" y="-2"/>
<labelMode val="2"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<arcSize val="30"/>
<allowReflexAngle val="true"/>
</element>
<command name="Angle">
<input a0="E" a1="F" a2="D"/>
<output a0="β"/>
</command>
<element type="angle" label="β">
<value val="1.5707963267948966"/>
<show object="true" label="true"/>
<condition showObject="o ≟ true"/>
<objColor r="0" g="100" b="0" alpha="0.1"/>
<layer val="0"/>
<labelOffset x="-28" y="16"/>
<labelMode val="2"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<arcSize val="30"/>
<allowReflexAngle val="true"/>
</element>
<expression label="text1" exp=""外公切線$ \overline{EF}=\overline{GD} $ $\overline{GD}^2=\overline{CD}^{2}-\overline{CG}^2$ $\overline{CG}=r_1-r_2""/>
<element type="text" label="text1">
<show object="true" label="false"/>
<condition showObject="o ≟ true"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<isLaTeX val="true"/>
<font serif="true" size="0" style="0"/>
<startPoint x="4.779999999999999" y="6.100000000000001" z="1.0"/>
</element>
<command name="Intersect">
<input a0="f" a1="j"/>
<output a0="H" a1=""/>
</command>
<element type="point" label="H">
<show object="true" label="true"/>
<condition showObject="p ≟ true"/>
<objColor r="64" g="64" b="64" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="1.5311688311688303" y="1.3391092254434414" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Segment">
<input a0="C" a1="H"/>
<output a0="q"/>
</command>
<element type="segment" label="q">
<show object="true" label="false"/>
<condition showObject="p ≟ true"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="-1.8191092254434413" y="0.8311688311688303" z="1.6723374967714477"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eqnStyle style="implicit"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<command name="Intersect">
<input a0="g" a1="j"/>
<output a0="I" a1=""/>
</command>
<element type="point" label="I">
<show object="true" label="true"/>
<condition showObject="p ≟ true"/>
<objColor r="64" g="64" b="64" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="0" y="22"/>
<labelMode val="0"/>
<coords x="7.9012987012987015" y="-1.5714655352660651" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Ray">
<input a0="D" a1="I"/>
<output a0="r"/>
</command>
<element type="ray" label="r">
<show object="true" label="false"/>
<condition showObject="p ≟ true"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="1.0914655352660652" y="-0.49870129870129887" z="-9.407687119611571"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eqnStyle style="implicit"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<command name="OrthogonalLine">
<input a0="C" a1="r"/>
<output a0="s"/>
</command>
<element type="line" label="s">
<show object="true" label="false"/>
<condition showObject="p ≟ true"/>
<objColor r="255" g="153" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="0.49870129870129887" y="1.0914655352660652" z="0.17481254783680217"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<eqnStyle style="implicit"/>
</element>
<command name="Intersect">
<input a0="s" a1="r"/>
<output a0="J"/>
</command>
<element type="point" label="J">
<show object="true" label="true"/>
<condition showObject="p ≟ true"/>
<objColor r="64" g="64" b="64" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="-22" y="10"/>
<labelMode val="0"/>
<coords x="10.180987012987014" y="-4.882427655421693" z="1.4400000000000002"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Angle">
<input a0="I" a1="J" a2="C"/>
<output a0="γ"/>
</command>
<element type="angle" label="γ">
<value val="1.5707963267948963"/>
<show object="true" label="true"/>
<condition showObject="p ≟ true"/>
<objColor r="0" g="100" b="0" alpha="0.1"/>
<layer val="0"/>
<labelOffset x="-2" y="-28"/>
<labelMode val="2"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<arcSize val="30"/>
<allowReflexAngle val="true"/>
</element>
<command name="Angle">
<input a0="C" a1="H" a2="I"/>
<output a0="δ"/>
</command>
<element type="angle" label="δ">
<value val="1.5707963267948963"/>
<show object="true" label="true"/>
<condition showObject="p ≟ true"/>
<objColor r="0" g="100" b="0" alpha="0.1"/>
<layer val="0"/>
<labelOffset x="-12" y="22"/>
<labelMode val="2"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<arcSize val="30"/>
<allowReflexAngle val="true"/>
</element>
<command name="Angle">
<input a0="H" a1="I" a2="J"/>
<output a0="ε"/>
</command>
<element type="angle" label="ε">
<value val="1.5707963267948966"/>
<show object="true" label="true"/>
<condition showObject="p ≟ true"/>
<objColor r="0" g="100" b="0" alpha="0.1"/>
<layer val="0"/>
<labelOffset x="-38" y="-6"/>
<labelMode val="2"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<arcSize val="30"/>
<allowReflexAngle val="true"/>
</element>
<expression label="text2" exp=""內公切線$\overline{HI}=\overline{CJ}$ $\overline{CJ}^2=\overline{CD}^2-\overline{JD}^2$ $\overline{JD}=r_1+r_2$""/>
<element type="text" label="text2">
<show object="true" label="false"/>
<condition showObject="p ≟ true"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<isLaTeX val="true"/>
<font serif="true" size="0" style="0"/>
<startPoint x="5.36" y="4.58" z="1.0"/>
</element>
</construction>
</geogebra>