<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://jsxgraph.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sahand</id>
	<title>JSXGraph Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://jsxgraph.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sahand"/>
	<link rel="alternate" type="text/html" href="https://jsxgraph.org/wiki/index.php?title=Special:Contributions/Sahand"/>
	<updated>2026-04-05T22:36:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://jsxgraph.org/wiki/index.php?title=Thales_inscribed_angle_theorem&amp;diff=6200</id>
		<title>Thales inscribed angle theorem</title>
		<link rel="alternate" type="text/html" href="https://jsxgraph.org/wiki/index.php?title=Thales_inscribed_angle_theorem&amp;diff=6200"/>
		<updated>2014-01-26T22:17:06Z</updated>

		<summary type="html">&lt;p&gt;Sahand: /* The underlying JavaScript code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This example demonstrates Thales&#039; inscribed angle theorem. You can move point the &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, or &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;. It also demonstrates how to dynamically get an angle value in JSXGraph and set a label based on it using hooks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;jsxgraph width=&amp;quot;600&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
var brd = JXG.JSXGraph.initBoard(&#039;jxgbox&#039;,{boundingbox:[-6,6,6,-6]});&lt;br /&gt;
o = brd.create(&#039;point&#039;, [0, 0], {name: &#039;O&#039;});&lt;br /&gt;
c = brd.create(&#039;circle&#039;, [o, 4], {name: &#039;C&#039;});&lt;br /&gt;
&lt;br /&gt;
a = brd.create(&#039;glider&#039;, [3, 0, c], {name: &#039;A&#039;});&lt;br /&gt;
b = brd.create(&#039;glider&#039;, [-3, -3, c], {name: &#039;B&#039;, label:{offset:[-15,0]}});&lt;br /&gt;
p = brd.create(&#039;point&#039;, [-1, 2], {name: &#039;P&#039;});&lt;br /&gt;
&lt;br /&gt;
opts = {strokeColor: &#039;blue&#039;};&lt;br /&gt;
lab = brd.create(&#039;segment&#039;, [a, b], opts);&lt;br /&gt;
&lt;br /&gt;
opts = {strokeColor: &#039;blue&#039;};&lt;br /&gt;
lpb = brd.create(&#039;segment&#039;, [p, b], opts);&lt;br /&gt;
lpa = brd.create(&#039;segment&#039;, [a, p], opts);&lt;br /&gt;
&lt;br /&gt;
op = brd.create(&#039;line&#039;, [o, p], {visible: false});&lt;br /&gt;
&lt;br /&gt;
pp = brd.create(&#039;intersection&#039;, [c, op, 0], {name: &#039;P\&#039;&#039;, label:{offset:[0,15]}});&lt;br /&gt;
opts = {strokeColor: &#039;green&#039;};&lt;br /&gt;
lppb = brd.create(&#039;segment&#039;, [pp, b], opts );&lt;br /&gt;
lppa = brd.create(&#039;segment&#039;, [a, pp], opts);&lt;br /&gt;
opts = {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;};&lt;br /&gt;
lopp = brd.create(&#039;segment&#039;, [o, pp], opts);&lt;br /&gt;
&lt;br /&gt;
angp = brd.create(&#039;angle&#039;, [b, p, a]);&lt;br /&gt;
angpp = brd.create(&#039;angle&#039;, [b, pp, a]);&lt;br /&gt;
&lt;br /&gt;
var setAngleLabels = function() {&lt;br /&gt;
angp.setLabelText(angp.Value().toFixed(2));&lt;br /&gt;
angpp.setLabelText(angpp.Value().toFixed(2));&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
setAngleLabels();&lt;br /&gt;
brd.addHook(function() { setAngleLabels(); }, &#039;move&#039;);&lt;br /&gt;
&amp;lt;/jsxgraph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The underlying JavaScript code===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var brd = JXG.JSXGraph.initBoard(&#039;jxgbox&#039;,{boundingbox:[-6,6,6,-6]});&lt;br /&gt;
o1 = brd.create(&#039;point&#039;, [-2, 2], {name: &#039;O1&#039;});&lt;br /&gt;
o2 = brd.create(&#039;point&#039;, [3, -3], {name: &#039;O2&#039;});&lt;br /&gt;
&lt;br /&gt;
p1 = brd.create(&#039;point&#039;, [-3, 5], {name: &#039;P1&#039;});&lt;br /&gt;
p2 = brd.create(&#039;point&#039;, [2, -3], {name: &#039;P2&#039;});&lt;br /&gt;
&lt;br /&gt;
c1 = brd.create(&#039;circle&#039;, [o1, p1]);&lt;br /&gt;
c2 = brd.create(&#039;circle&#039;, [o2, p2]);&lt;br /&gt;
&lt;br /&gt;
m = brd.create(&#039;midpoint&#039;, [o1, o2], {name: &#039;M&#039;});&lt;br /&gt;
lm = brd.create(&#039;line&#039;, [o1, o2], {&#039;strokeWidth&#039;: &#039;1px&#039;, &#039;strokeColor&#039;:&#039;gray&#039;} );&lt;br /&gt;
&lt;br /&gt;
c3 = brd.create(&#039;circle&#039;, [m, o2], {&#039;strokeColor&#039;:&#039;green&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
c4 = brd.create(&#039;circle&#039;, [o1, function() {&lt;br /&gt;
        r1 = c1.Radius();&lt;br /&gt;
        r2 = c2.Radius();&lt;br /&gt;
        if(r1 &amp;gt; r2) {&lt;br /&gt;
            return r1 - r2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return r2 + r1;&lt;br /&gt;
        }&lt;br /&gt;
}], {&#039;strokeColor&#039;: &#039;purple&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
i1 = brd.create(&#039;intersection&#039;, [c3,c4,0],{visible:true});&lt;br /&gt;
i2 = brd.create(&#039;intersection&#039;, [c3,c4,1],{visible:true});&lt;br /&gt;
&lt;br /&gt;
l1 = brd.create(&#039;line&#039;, [o1, i1], {visible: false});&lt;br /&gt;
l2 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
i3 = brd.create(&#039;intersection&#039;, [c1,l1,0],{visible:true});&lt;br /&gt;
i4 = brd.create(&#039;intersection&#039;, [c1,l2,0],{visible:true});&lt;br /&gt;
&lt;br /&gt;
v1 = brd.create(&#039;arrow&#039;, [o1, i3], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
v2 = brd.create(&#039;arrow&#039;, [o1, i4], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
l3 = brd.create(&#039;line&#039;, [i1, o1], {visible: false});&lt;br /&gt;
l4 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
t1 = brd.create(&#039;tangent&#039;, [c1, i3], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
t2 = brd.create(&#039;tangent&#039;, [c1, i4], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
&lt;br /&gt;
t3 = brd.create(&#039;line&#039;, [o2, i1], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
t4 = brd.create(&#039;line&#039;, [o2, i2], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Geometry]]&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Sahand</name></author>
	</entry>
	<entry>
		<id>https://jsxgraph.org/wiki/index.php?title=Thales_inscribed_angle_theorem&amp;diff=6199</id>
		<title>Thales inscribed angle theorem</title>
		<link rel="alternate" type="text/html" href="https://jsxgraph.org/wiki/index.php?title=Thales_inscribed_angle_theorem&amp;diff=6199"/>
		<updated>2014-01-26T22:15:58Z</updated>

		<summary type="html">&lt;p&gt;Sahand: Created page with &amp;quot;This example demonstrates Thales&amp;#039; inscribed angle theorem. You can move point the &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, or &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;. It also demonstrates how to dynamically ge...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This example demonstrates Thales&#039; inscribed angle theorem. You can move point the &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, or &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;. It also demonstrates how to dynamically get an angle value in JSXGraph and set a label based on it using hooks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;jsxgraph width=&amp;quot;600&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
var brd = JXG.JSXGraph.initBoard(&#039;jxgbox&#039;,{boundingbox:[-6,6,6,-6]});&lt;br /&gt;
o = brd.create(&#039;point&#039;, [0, 0], {name: &#039;O&#039;});&lt;br /&gt;
c = brd.create(&#039;circle&#039;, [o, 4], {name: &#039;C&#039;});&lt;br /&gt;
&lt;br /&gt;
a = brd.create(&#039;glider&#039;, [3, 0, c], {name: &#039;A&#039;});&lt;br /&gt;
b = brd.create(&#039;glider&#039;, [-3, -3, c], {name: &#039;B&#039;, label:{offset:[-15,0]}});&lt;br /&gt;
p = brd.create(&#039;point&#039;, [-1, 2], {name: &#039;P&#039;});&lt;br /&gt;
&lt;br /&gt;
opts = {strokeColor: &#039;blue&#039;};&lt;br /&gt;
lab = brd.create(&#039;segment&#039;, [a, b], opts);&lt;br /&gt;
&lt;br /&gt;
opts = {strokeColor: &#039;blue&#039;};&lt;br /&gt;
lpb = brd.create(&#039;segment&#039;, [p, b], opts);&lt;br /&gt;
lpa = brd.create(&#039;segment&#039;, [a, p], opts);&lt;br /&gt;
&lt;br /&gt;
op = brd.create(&#039;line&#039;, [o, p], {visible: false});&lt;br /&gt;
&lt;br /&gt;
pp = brd.create(&#039;intersection&#039;, [c, op, 0], {name: &#039;P\&#039;&#039;, label:{offset:[0,15]}});&lt;br /&gt;
opts = {strokeColor: &#039;green&#039;};&lt;br /&gt;
lppb = brd.create(&#039;segment&#039;, [pp, b], opts );&lt;br /&gt;
lppa = brd.create(&#039;segment&#039;, [a, pp], opts);&lt;br /&gt;
opts = {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;};&lt;br /&gt;
lopp = brd.create(&#039;segment&#039;, [o, pp], opts);&lt;br /&gt;
&lt;br /&gt;
angp = brd.create(&#039;angle&#039;, [b, p, a]);&lt;br /&gt;
angpp = brd.create(&#039;angle&#039;, [b, pp, a]);&lt;br /&gt;
&lt;br /&gt;
var setAngleLabels = function() {&lt;br /&gt;
angp.setLabelText(angp.Value().toFixed(2));&lt;br /&gt;
angpp.setLabelText(angpp.Value().toFixed(2));&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
setAngleLabels();&lt;br /&gt;
brd.addHook(function() { setAngleLabels(); }, &#039;move&#039;);&lt;br /&gt;
&amp;lt;/jsxgraph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The underlying JavaScript code===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var brd = JXG.JSXGraph.initBoard(&#039;jxgbox&#039;,{boundingbox:[-8,8,8,-8]});&lt;br /&gt;
o1 = brd.create(&#039;point&#039;, [-2, 2], {name: &#039;O1&#039;});&lt;br /&gt;
o2 = brd.create(&#039;point&#039;, [3, -3], {name: &#039;O2&#039;});&lt;br /&gt;
&lt;br /&gt;
p1 = brd.create(&#039;point&#039;, [-3, 5], {name: &#039;P1&#039;});&lt;br /&gt;
p2 = brd.create(&#039;point&#039;, [2, -3], {name: &#039;P2&#039;});&lt;br /&gt;
&lt;br /&gt;
c1 = brd.create(&#039;circle&#039;, [o1, p1]);&lt;br /&gt;
c2 = brd.create(&#039;circle&#039;, [o2, p2]);&lt;br /&gt;
&lt;br /&gt;
m = brd.create(&#039;midpoint&#039;, [o1, o2], {name: &#039;M&#039;});&lt;br /&gt;
lm = brd.create(&#039;line&#039;, [o1, o2], {&#039;strokeWidth&#039;: &#039;1px&#039;, &#039;strokeColor&#039;:&#039;gray&#039;} );&lt;br /&gt;
&lt;br /&gt;
c3 = brd.create(&#039;circle&#039;, [m, o2], {&#039;strokeColor&#039;:&#039;green&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
c4 = brd.create(&#039;circle&#039;, [o1, function() {&lt;br /&gt;
        r1 = c1.Radius();&lt;br /&gt;
        r2 = c2.Radius();&lt;br /&gt;
        if(r1 &amp;gt; r2) {&lt;br /&gt;
            return r1 - r2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return r2 + r1;&lt;br /&gt;
        }&lt;br /&gt;
}], {&#039;strokeColor&#039;: &#039;purple&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
i1 = brd.create(&#039;intersection&#039;, [c3,c4,0],{visible:true});&lt;br /&gt;
i2 = brd.create(&#039;intersection&#039;, [c3,c4,1],{visible:true});&lt;br /&gt;
&lt;br /&gt;
l1 = brd.create(&#039;line&#039;, [o1, i1], {visible: false});&lt;br /&gt;
l2 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
i3 = brd.create(&#039;intersection&#039;, [c1,l1,0],{visible:true});&lt;br /&gt;
i4 = brd.create(&#039;intersection&#039;, [c1,l2,0],{visible:true});&lt;br /&gt;
&lt;br /&gt;
v1 = brd.create(&#039;arrow&#039;, [o1, i3], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
v2 = brd.create(&#039;arrow&#039;, [o1, i4], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
l3 = brd.create(&#039;line&#039;, [i1, o1], {visible: false});&lt;br /&gt;
l4 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
t1 = brd.create(&#039;tangent&#039;, [c1, i3], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
t2 = brd.create(&#039;tangent&#039;, [c1, i4], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
&lt;br /&gt;
t3 = brd.create(&#039;line&#039;, [o2, i1], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
t4 = brd.create(&#039;line&#039;, [o2, i2], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Geometry]]&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Sahand</name></author>
	</entry>
	<entry>
		<id>https://jsxgraph.org/wiki/index.php?title=Tangent_line_to_two_circles&amp;diff=6198</id>
		<title>Tangent line to two circles</title>
		<link rel="alternate" type="text/html" href="https://jsxgraph.org/wiki/index.php?title=Tangent_line_to_two_circles&amp;diff=6198"/>
		<updated>2014-01-26T22:10:53Z</updated>

		<summary type="html">&lt;p&gt;Sahand: /* The underlying JavaScript code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Step by step construction of tangent lines to two circles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;jsxgraph width=&amp;quot;600&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
        var brd = JXG.JSXGraph.initBoard(&#039;jxgbox&#039;,{boundingbox:[-8,8,8,-8]});&lt;br /&gt;
        o1 = brd.create(&#039;point&#039;, [-2, 2], {name: &#039;O1&#039;});&lt;br /&gt;
        o2 = brd.create(&#039;point&#039;, [3, -3], {name: &#039;O2&#039;});&lt;br /&gt;
&lt;br /&gt;
        p1 = brd.create(&#039;point&#039;, [-3, 5], {name: &#039;P1&#039;});&lt;br /&gt;
        p2 = brd.create(&#039;point&#039;, [2, -3], {name: &#039;P2&#039;});&lt;br /&gt;
&lt;br /&gt;
        c1 = brd.create(&#039;circle&#039;, [o1, p1]);&lt;br /&gt;
        c2 = brd.create(&#039;circle&#039;, [o2, p2]);&lt;br /&gt;
&lt;br /&gt;
        m = brd.create(&#039;midpoint&#039;, [o1, o2], {name: &#039;M&#039;});&lt;br /&gt;
        lm = brd.create(&#039;line&#039;, [o1, o2], {&#039;strokeWidth&#039;: &#039;1px&#039;, &#039;strokeColor&#039;:&#039;gray&#039;} );&lt;br /&gt;
&lt;br /&gt;
        c3 = brd.create(&#039;circle&#039;, [m, o2], {&#039;strokeColor&#039;:&#039;green&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        c4 = brd.create(&#039;circle&#039;, [o1, function() {&lt;br /&gt;
                r1 = c1.Radius();&lt;br /&gt;
                r2 = c2.Radius();&lt;br /&gt;
                if(r1 &amp;gt; r2) {&lt;br /&gt;
                    return r1 - r2;&lt;br /&gt;
                } else {&lt;br /&gt;
                    return r2 + r1;&lt;br /&gt;
                }&lt;br /&gt;
        }], {&#039;strokeColor&#039;: &#039;purple&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        i1 = brd.create(&#039;intersection&#039;, [c3,c4,0],{visible:true});&lt;br /&gt;
        i2 = brd.create(&#039;intersection&#039;, [c3,c4,1],{visible:true});&lt;br /&gt;
&lt;br /&gt;
        l1 = brd.create(&#039;line&#039;, [o1, i1], {visible: false});&lt;br /&gt;
        l2 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
        i3 = brd.create(&#039;intersection&#039;, [c1,l1,0],{visible:true});&lt;br /&gt;
        i4 = brd.create(&#039;intersection&#039;, [c1,l2,0],{visible:true});&lt;br /&gt;
&lt;br /&gt;
        v1 = brd.create(&#039;arrow&#039;, [o1, i3], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
        v2 = brd.create(&#039;arrow&#039;, [o1, i4], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        l3 = brd.create(&#039;line&#039;, [i1, o1], {visible: false});&lt;br /&gt;
        l4 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
        t1 = brd.create(&#039;tangent&#039;, [c1, i3], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
        t2 = brd.create(&#039;tangent&#039;, [c1, i4], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
&lt;br /&gt;
        t3 = brd.create(&#039;line&#039;, [o2, i1], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
        t4 = brd.create(&#039;line&#039;, [o2, i2], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
&amp;lt;/jsxgraph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The underlying JavaScript code===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var brd = JXG.JSXGraph.initBoard(&#039;jxgbox&#039;,{boundingbox:[-8,8,8,-8]});&lt;br /&gt;
o1 = brd.create(&#039;point&#039;, [-2, 2], {name: &#039;O1&#039;});&lt;br /&gt;
o2 = brd.create(&#039;point&#039;, [3, -3], {name: &#039;O2&#039;});&lt;br /&gt;
&lt;br /&gt;
p1 = brd.create(&#039;point&#039;, [-3, 5], {name: &#039;P1&#039;});&lt;br /&gt;
p2 = brd.create(&#039;point&#039;, [2, -3], {name: &#039;P2&#039;});&lt;br /&gt;
&lt;br /&gt;
c1 = brd.create(&#039;circle&#039;, [o1, p1]);&lt;br /&gt;
c2 = brd.create(&#039;circle&#039;, [o2, p2]);&lt;br /&gt;
&lt;br /&gt;
m = brd.create(&#039;midpoint&#039;, [o1, o2], {name: &#039;M&#039;});&lt;br /&gt;
lm = brd.create(&#039;line&#039;, [o1, o2], {&#039;strokeWidth&#039;: &#039;1px&#039;, &#039;strokeColor&#039;:&#039;gray&#039;} );&lt;br /&gt;
&lt;br /&gt;
c3 = brd.create(&#039;circle&#039;, [m, o2], {&#039;strokeColor&#039;:&#039;green&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
c4 = brd.create(&#039;circle&#039;, [o1, function() {&lt;br /&gt;
        r1 = c1.Radius();&lt;br /&gt;
        r2 = c2.Radius();&lt;br /&gt;
        if(r1 &amp;gt; r2) {&lt;br /&gt;
            return r1 - r2;&lt;br /&gt;
        } else {&lt;br /&gt;
            return r2 + r1;&lt;br /&gt;
        }&lt;br /&gt;
}], {&#039;strokeColor&#039;: &#039;purple&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
i1 = brd.create(&#039;intersection&#039;, [c3,c4,0],{visible:true});&lt;br /&gt;
i2 = brd.create(&#039;intersection&#039;, [c3,c4,1],{visible:true});&lt;br /&gt;
&lt;br /&gt;
l1 = brd.create(&#039;line&#039;, [o1, i1], {visible: false});&lt;br /&gt;
l2 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
i3 = brd.create(&#039;intersection&#039;, [c1,l1,0],{visible:true});&lt;br /&gt;
i4 = brd.create(&#039;intersection&#039;, [c1,l2,0],{visible:true});&lt;br /&gt;
&lt;br /&gt;
v1 = brd.create(&#039;arrow&#039;, [o1, i3], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
v2 = brd.create(&#039;arrow&#039;, [o1, i4], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
l3 = brd.create(&#039;line&#039;, [i1, o1], {visible: false});&lt;br /&gt;
l4 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
t1 = brd.create(&#039;tangent&#039;, [c1, i3], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
t2 = brd.create(&#039;tangent&#039;, [c1, i4], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
&lt;br /&gt;
t3 = brd.create(&#039;line&#039;, [o2, i1], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
t4 = brd.create(&#039;line&#039;, [o2, i2], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Geometry]]&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Sahand</name></author>
	</entry>
	<entry>
		<id>https://jsxgraph.org/wiki/index.php?title=Tangent_line_to_two_circles&amp;diff=6197</id>
		<title>Tangent line to two circles</title>
		<link rel="alternate" type="text/html" href="https://jsxgraph.org/wiki/index.php?title=Tangent_line_to_two_circles&amp;diff=6197"/>
		<updated>2014-01-26T22:09:43Z</updated>

		<summary type="html">&lt;p&gt;Sahand: Step by step construction of tangent lines to two circles.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Step by step construction of tangent lines to two circles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;jsxgraph width=&amp;quot;600&amp;quot; height=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
        var brd = JXG.JSXGraph.initBoard(&#039;jxgbox&#039;,{boundingbox:[-8,8,8,-8]});&lt;br /&gt;
        o1 = brd.create(&#039;point&#039;, [-2, 2], {name: &#039;O1&#039;});&lt;br /&gt;
        o2 = brd.create(&#039;point&#039;, [3, -3], {name: &#039;O2&#039;});&lt;br /&gt;
&lt;br /&gt;
        p1 = brd.create(&#039;point&#039;, [-3, 5], {name: &#039;P1&#039;});&lt;br /&gt;
        p2 = brd.create(&#039;point&#039;, [2, -3], {name: &#039;P2&#039;});&lt;br /&gt;
&lt;br /&gt;
        c1 = brd.create(&#039;circle&#039;, [o1, p1]);&lt;br /&gt;
        c2 = brd.create(&#039;circle&#039;, [o2, p2]);&lt;br /&gt;
&lt;br /&gt;
        m = brd.create(&#039;midpoint&#039;, [o1, o2], {name: &#039;M&#039;});&lt;br /&gt;
        lm = brd.create(&#039;line&#039;, [o1, o2], {&#039;strokeWidth&#039;: &#039;1px&#039;, &#039;strokeColor&#039;:&#039;gray&#039;} );&lt;br /&gt;
&lt;br /&gt;
        c3 = brd.create(&#039;circle&#039;, [m, o2], {&#039;strokeColor&#039;:&#039;green&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        c4 = brd.create(&#039;circle&#039;, [o1, function() {&lt;br /&gt;
                r1 = c1.Radius();&lt;br /&gt;
                r2 = c2.Radius();&lt;br /&gt;
                if(r1 &amp;gt; r2) {&lt;br /&gt;
                    return r1 - r2;&lt;br /&gt;
                } else {&lt;br /&gt;
                    return r2 + r1;&lt;br /&gt;
                }&lt;br /&gt;
        }], {&#039;strokeColor&#039;: &#039;purple&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        i1 = brd.create(&#039;intersection&#039;, [c3,c4,0],{visible:true});&lt;br /&gt;
        i2 = brd.create(&#039;intersection&#039;, [c3,c4,1],{visible:true});&lt;br /&gt;
&lt;br /&gt;
        l1 = brd.create(&#039;line&#039;, [o1, i1], {visible: false});&lt;br /&gt;
        l2 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
        i3 = brd.create(&#039;intersection&#039;, [c1,l1,0],{visible:true});&lt;br /&gt;
        i4 = brd.create(&#039;intersection&#039;, [c1,l2,0],{visible:true});&lt;br /&gt;
&lt;br /&gt;
        v1 = brd.create(&#039;arrow&#039;, [o1, i3], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
        v2 = brd.create(&#039;arrow&#039;, [o1, i4], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        l3 = brd.create(&#039;line&#039;, [i1, o1], {visible: false});&lt;br /&gt;
        l4 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
        t1 = brd.create(&#039;tangent&#039;, [c1, i3], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
        t2 = brd.create(&#039;tangent&#039;, [c1, i4], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
&lt;br /&gt;
        t3 = brd.create(&#039;line&#039;, [o2, i1], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
        t4 = brd.create(&#039;line&#039;, [o2, i2], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
&amp;lt;/jsxgraph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The underlying JavaScript code===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
        var brd = JXG.JSXGraph.initBoard(&#039;jxgbox&#039;,{boundingbox:[-8,8,8,-8]});&lt;br /&gt;
        o1 = brd.create(&#039;point&#039;, [-2, 2], {name: &#039;O1&#039;});&lt;br /&gt;
        o2 = brd.create(&#039;point&#039;, [3, -3], {name: &#039;O2&#039;});&lt;br /&gt;
&lt;br /&gt;
        p1 = brd.create(&#039;point&#039;, [-3, 5], {name: &#039;P1&#039;});&lt;br /&gt;
        p2 = brd.create(&#039;point&#039;, [2, -3], {name: &#039;P2&#039;});&lt;br /&gt;
&lt;br /&gt;
        c1 = brd.create(&#039;circle&#039;, [o1, p1]);&lt;br /&gt;
        c2 = brd.create(&#039;circle&#039;, [o2, p2]);&lt;br /&gt;
&lt;br /&gt;
        m = brd.create(&#039;midpoint&#039;, [o1, o2], {name: &#039;M&#039;});&lt;br /&gt;
        lm = brd.create(&#039;line&#039;, [o1, o2], {&#039;strokeWidth&#039;: &#039;1px&#039;, &#039;strokeColor&#039;:&#039;gray&#039;} );&lt;br /&gt;
&lt;br /&gt;
        c3 = brd.create(&#039;circle&#039;, [m, o2], {&#039;strokeColor&#039;:&#039;green&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        c4 = brd.create(&#039;circle&#039;, [o1, function() {&lt;br /&gt;
                r1 = c1.Radius();&lt;br /&gt;
                r2 = c2.Radius();&lt;br /&gt;
                if(r1 &amp;gt; r2) {&lt;br /&gt;
                    return r1 - r2;&lt;br /&gt;
                } else {&lt;br /&gt;
                    return r2 + r1;&lt;br /&gt;
                }&lt;br /&gt;
        }], {&#039;strokeColor&#039;: &#039;purple&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        i1 = brd.create(&#039;intersection&#039;, [c3,c4,0],{visible:true});&lt;br /&gt;
        i2 = brd.create(&#039;intersection&#039;, [c3,c4,1],{visible:true});&lt;br /&gt;
&lt;br /&gt;
        l1 = brd.create(&#039;line&#039;, [o1, i1], {visible: false});&lt;br /&gt;
        l2 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
        i3 = brd.create(&#039;intersection&#039;, [c1,l1,0],{visible:true});&lt;br /&gt;
        i4 = brd.create(&#039;intersection&#039;, [c1,l2,0],{visible:true});&lt;br /&gt;
&lt;br /&gt;
        v1 = brd.create(&#039;arrow&#039;, [o1, i3], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
        v2 = brd.create(&#039;arrow&#039;, [o1, i4], {strokeColor: &#039;lightblue&#039;, strokeWidth: &#039;1px&#039;});&lt;br /&gt;
&lt;br /&gt;
        l3 = brd.create(&#039;line&#039;, [i1, o1], {visible: false});&lt;br /&gt;
        l4 = brd.create(&#039;line&#039;, [o1, i2], {visible: false});&lt;br /&gt;
&lt;br /&gt;
        t1 = brd.create(&#039;tangent&#039;, [c1, i3], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
        t2 = brd.create(&#039;tangent&#039;, [c1, i4], {strokeColor:&#039;darkblue&#039;});&lt;br /&gt;
&lt;br /&gt;
        t3 = brd.create(&#039;line&#039;, [o2, i1], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
        t4 = brd.create(&#039;line&#039;, [o2, i2], {strokeColor:&#039;pink&#039;});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Geometry]]&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Sahand</name></author>
	</entry>
</feed>