summaryrefslogtreecommitdiffhomepage
path: root/digital/beacon/others
diff options
context:
space:
mode:
Diffstat (limited to 'digital/beacon/others')
-rw-r--r--digital/beacon/others/tdoa/doc/tdoa-large.plot14
-rw-r--r--digital/beacon/others/tdoa/doc/tdoa-small.plot25
-rw-r--r--digital/beacon/others/tdoa/doc/tdoa_drawing.svg358
-rw-r--r--digital/beacon/others/triangle_beacon/doc/triangle.py125
-rw-r--r--digital/beacon/others/triangle_beacon/doc/triangle_drawing.svg578
-rw-r--r--digital/beacon/others/triangle_robot/doc/triangle.plot80
-rw-r--r--digital/beacon/others/triangle_robot/doc/triangle.py186
-rw-r--r--digital/beacon/others/triangle_robot/doc/triangle_drawing.svg877
8 files changed, 2243 insertions, 0 deletions
diff --git a/digital/beacon/others/tdoa/doc/tdoa-large.plot b/digital/beacon/others/tdoa/doc/tdoa-large.plot
new file mode 100644
index 00000000..ed7200f2
--- /dev/null
+++ b/digital/beacon/others/tdoa/doc/tdoa-large.plot
@@ -0,0 +1,14 @@
+set xrange [0:3000]
+set yrange [0:2100]
+tdoa (x, y, x0, y0, x1, y1) = sqrt ((x - x0)**2 + (y - y0)**2) - sqrt ((x - x1)**2 + (y - y1)**2)
+tdoa_b12 (x, y) = tdoa (x, y, 3000, 0, 3000, 2100)
+tdoa_b23 (x, y) = tdoa (x, y, 3000, 0, 0, 1050)
+tdoa_b31 (x, y) = tdoa (x, y, 3000, 2100, 0, 1050)
+set contour
+set cntrparam levels 50
+unset surface
+set view map
+unset clabel
+set term png
+set output 'tdoa-large.png'
+splot tdoa_b12 (x, y), tdoa_b23 (x, y), tdoa_b31 (x, y)
diff --git a/digital/beacon/others/tdoa/doc/tdoa-small.plot b/digital/beacon/others/tdoa/doc/tdoa-small.plot
new file mode 100644
index 00000000..d11af962
--- /dev/null
+++ b/digital/beacon/others/tdoa/doc/tdoa-small.plot
@@ -0,0 +1,25 @@
+set xrange [-1000:1000]
+set yrange [-1000:1000]
+tdoa (x, y, x0, y0, x1, y1) = sqrt ((x - x0)**2 + (y - y0)**2) - sqrt ((x - x1)**2 + (y - y1)**2)
+set isosamples 50
+set pm3d
+unset surface
+set term png
+set output 'tdoa-small_tm3d.png'
+splot tdoa (x, y, 4, -4, -4, 4)
+
+set contour
+set cntrparam levels 15
+unset pm3d
+set view map
+unset clabel
+set term png
+set output 'tdoa-small_contour.png'
+#splot tdoa (x, y, -4, -4, 4, 4), tdoa (x, y, -4, 4, 4, -4)
+#splot tdoa (x, y, -15, 0, -10, 0), tdoa (x, y, 15, 0, 10, 0)
+splot tdoa (x, y, -15, 0, -11, -4), tdoa (x, y, 15, 0, 15, -4)
+#set cntrparam levels discrete 8.42638136229502
+#set cntrparam levels discrete 2.99544039802068
+#set cntrparam levels discrete 5.43094096427434
+#splot tdoa (x, y, -4, -4, 0, 4), tdoa (x, y, 4, -4, 0, 4), tdoa (x, y, -4, -4, 4, -4)
+
diff --git a/digital/beacon/others/tdoa/doc/tdoa_drawing.svg b/digital/beacon/others/tdoa/doc/tdoa_drawing.svg
new file mode 100644
index 00000000..cd7852cf
--- /dev/null
+++ b/digital/beacon/others/tdoa/doc/tdoa_drawing.svg
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="beacon_tdoa.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/nico/robot/beacon_triangulation.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path3249"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Sstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Sstart"
+ style="overflow:visible">
+ <path
+ id="path3252"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.3) translate(-2.3,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ id="path3246"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path3222"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8) translate(12.5,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="6.1230318e-14 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.2161704"
+ inkscape:cx="240"
+ inkscape:cy="864.99038"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1024"
+ inkscape:window-height="760"
+ inkscape:window-x="0"
+ inkscape:window-y="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2387"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3247"
+ width="380"
+ height="249.98077"
+ x="50"
+ y="62.381413"
+ inkscape:export-filename="/home/nico/robot/beacon_tdoa_8.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="fill:#0c81c6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect2415"
+ width="300"
+ height="210"
+ x="90"
+ y="82.362183" />
+ <rect
+ style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3191"
+ width="10"
+ height="10"
+ x="390"
+ y="72.362183" />
+ <rect
+ style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3193"
+ width="10"
+ height="10"
+ x="390"
+ y="292.36218" />
+ <rect
+ style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3195"
+ width="10"
+ height="10"
+ x="80"
+ y="182.36218" />
+ <rect
+ style="fill:#e75130;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3197"
+ width="30"
+ height="30"
+ x="57.065926"
+ y="241.50412"
+ transform="matrix(0.7868701,-0.6171187,0.6171187,0.7868701,0,0)" />
+ <rect
+ style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3199"
+ width="10"
+ height="10"
+ x="67.065926"
+ y="251.50412"
+ transform="matrix(0.7868701,-0.6171187,0.6171187,0.7868701,0,0)" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="405"
+ y="302.36218"
+ id="text6194"><tspan
+ sodipodi:role="line"
+ id="tspan6196"
+ x="405"
+ y="302.36218">B1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="405"
+ y="82.362183"
+ id="text6198"><tspan
+ sodipodi:role="line"
+ id="tspan6200"
+ x="405"
+ y="82.362183">B2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="60"
+ y="192.36218"
+ id="text6202"><tspan
+ sodipodi:role="line"
+ id="tspan6204"
+ x="60"
+ y="192.36218">B3</tspan></text>
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mstart);marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 90,272.36218 L 90,292.36218 L 110,292.36218"
+ id="path6206" />
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="109.84116"
+ y="287.63474"
+ id="text7807"><tspan
+ sodipodi:role="line"
+ id="tspan7809"
+ x="109.84116"
+ y="287.63474">x</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="94.862816"
+ y="268.49576"
+ id="text7811"><tspan
+ sodipodi:role="line"
+ id="tspan7813"
+ x="94.862816"
+ y="268.49576">y</tspan></text>
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3223"
+ sodipodi:cx="215"
+ sodipodi:cy="157.36218"
+ sodipodi:rx="20"
+ sodipodi:ry="20"
+ d="M 235,157.36218 A 20,20 0 1 1 195,157.36218 A 20,20 0 1 1 235,157.36218 z" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3237"
+ sodipodi:cx="215"
+ sodipodi:cy="157.36218"
+ sodipodi:rx="45"
+ sodipodi:ry="45"
+ d="M 260,157.36218 A 45,45 0 1 1 170,157.36218 A 45,45 0 1 1 260,157.36218 z" />
+ <path
+ d="M 290,157.36218 A 75,75 0 1 1 140,157.36218 A 75,75 0 1 1 290,157.36218 z"
+ sodipodi:ry="75"
+ sodipodi:rx="75"
+ sodipodi:cy="157.36218"
+ sodipodi:cx="215"
+ id="path3225"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3227"
+ sodipodi:cx="215"
+ sodipodi:cy="157.36218"
+ sodipodi:rx="105"
+ sodipodi:ry="105"
+ d="M 320,157.36218 A 105,105 0 1 1 110,157.36218 A 105,105 0 1 1 320,157.36218 z" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3231"
+ sodipodi:cx="215"
+ sodipodi:cy="157.36218"
+ sodipodi:rx="135"
+ sodipodi:ry="135"
+ d="M 350,157.36218 A 135,135 0 1 1 80,157.36218 A 135,135 0 1 1 350,157.36218 z" />
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3281"
+ sodipodi:sides="5"
+ sodipodi:cx="89"
+ sodipodi:cy="193.36218"
+ sodipodi:r1="6.6897683"
+ sodipodi:r2="3.3448842"
+ sodipodi:arg1="-2.21171"
+ sodipodi:arg2="-1.5833914"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 85,188 L 88.957872,190.01756 L 92.86367,187.90095 L 92.167903,192.28857 L 95.38788,195.34914 L 91,196.04327 L 89.084256,200.05142 L 87.068165,196.0928 L 82.664194,195.5094 L 85.80606,192.3687 L 85,188 z"
+ transform="translate(-3.9578721,-2.6553811)" />
+ <path
+ d="M 380,157.36218 A 165,165 0 1 1 50,157.36218 A 165,165 0 1 1 380,157.36218 z"
+ sodipodi:ry="165"
+ sodipodi:rx="165"
+ sodipodi:cy="157.36218"
+ sodipodi:cx="215"
+ id="path3229"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ d="M 410,157.36218 A 195,195 0 1 1 20,157.36218 A 195,195 0 1 1 410,157.36218 z"
+ sodipodi:ry="195"
+ sodipodi:rx="195"
+ sodipodi:cy="157.36218"
+ sodipodi:cx="215"
+ id="path3233"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="translate(306.04213,-112.65538)"
+ d="M 85,188 L 88.957872,190.01756 L 92.86367,187.90095 L 92.167903,192.28857 L 95.38788,195.34914 L 91,196.04327 L 89.084256,200.05142 L 87.068165,196.0928 L 82.664194,195.5094 L 85.80606,192.3687 L 85,188 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="-1.5833914"
+ sodipodi:arg1="-2.21171"
+ sodipodi:r2="3.3448842"
+ sodipodi:r1="6.6897683"
+ sodipodi:cy="193.36218"
+ sodipodi:cx="89"
+ sodipodi:sides="5"
+ id="path3284"
+ style="opacity:1;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="star" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3235"
+ sodipodi:cx="215"
+ sodipodi:cy="157.36218"
+ sodipodi:rx="225"
+ sodipodi:ry="225"
+ d="M 440,157.36218 A 225,225 0 1 1 -10,157.36218 A 225,225 0 1 1 440,157.36218 z" />
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3286"
+ sodipodi:sides="5"
+ sodipodi:cx="89"
+ sodipodi:cy="193.36218"
+ sodipodi:r1="6.6897683"
+ sodipodi:r2="3.3448842"
+ sodipodi:arg1="-2.21171"
+ sodipodi:arg2="-1.5833914"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 85,188 L 88.957872,190.01756 L 92.86367,187.90095 L 92.167903,192.28857 L 95.38788,195.34914 L 91,196.04327 L 89.084256,200.05142 L 87.068165,196.0928 L 82.664194,195.5094 L 85.80606,192.3687 L 85,188 z"
+ transform="translate(302.13633,104.46123)" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ style="display:none" />
+</svg>
diff --git a/digital/beacon/others/triangle_beacon/doc/triangle.py b/digital/beacon/others/triangle_beacon/doc/triangle.py
new file mode 100644
index 00000000..828fe277
--- /dev/null
+++ b/digital/beacon/others/triangle_beacon/doc/triangle.py
@@ -0,0 +1,125 @@
+# Triangle - Triangulation beacon system study. {{{
+#
+# Copyright (C) 2010 Nicolas Schodet
+#
+# APBTeam:
+# Web: http://apbteam.org/
+# Email: team AT apbteam DOT org
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# }}}
+from math import *
+from numpy import *
+import Gnuplot, Gnuplot.funcutils
+
+B1 = array ([3000, 0])
+B2 = array ([3000, 2100])
+B3 = array ([0, 2100 / 2])
+
+def norm (v):
+ """Compute vector norm."""
+ return sqrt (sum (v ** 2))
+
+def rotate (v):
+ """Rotate a vector by pi/2."""
+ return array ([-v[1], v[0]])
+
+def angle (o, a, b):
+ """Compute angle (v_oa, v_ob)."""
+ v_oa = a - o
+ v_ob = b - o
+ # Use dot product to compute angle.
+ angle = acos (dot (v_oa, v_ob) / (norm (v_oa) * norm (v_ob)))
+ # Use cross product to determine angle sign.
+ if v_oa[0] * v_ob[1] - v_ob[0] * v_oa[1] >= 0:
+ return angle
+ else:
+ return 2 * pi - angle
+
+def solve (Ba, Bb, alphaa, alphab):
+ """Solve using angles."""
+ l = norm (Ba - Bb)
+ d = l * sin (alphaa) * sin (alphab) / sin (alphaa + alphab)
+ b = d / tan (alphaa)
+ v_n = Bb - Ba
+ v_n = v_n / norm (v_n)
+ o = Ba + v_n * b + rotate (v_n) * d
+ return o
+
+def trace (Ba, Bb, o, f, output, factor):
+ """Trace f()[output] * factor for alphan corresponding to the point o."""
+ # Compute angles.
+ alphaa = angle (Ba, Bb, o)
+ alphab = angle (Bb, o, Ba)
+ # Return.
+ return f (Ba, Bb, alphaa, alphab)[output] * factor
+
+def compute_prec (Ba, Bb, o, f, prec):
+ """Return an aproximation of distance error with the given angle error."""
+ # Compute angles.
+ alphaa = angle (Ba, Bb, o)
+ alphab = angle (Bb, o, Ba)
+ # Evaluate error.
+ e = 0
+ for i in ((-1, -1), (-1, 1), (1, -1), (1, 1)):
+ o2 = f (Ba, Bb, alphaa + i[0] * prec, alphab + i[1] * prec)
+ e = max (norm (o - o2), e)
+ return e
+
+if __name__ == '__main__':
+ # Parameters.
+ Ba = B1
+ Bb = B2
+ method = solve
+ prec = 2 * pi / 720
+ plot = 'prec'
+ style = 'map'
+ hardcopy = None
+ zrange = None
+ # Setup gnuplot.
+ persist = False
+ g = Gnuplot.Gnuplot (persist = persist)
+ g ('set term x11')
+ g ('set style data lines')
+ if style == '3d':
+ pass
+ else:
+ g ('set view map')
+ g ('set nosurface')
+ if style == 'map':
+ g ('set pm3d')
+ elif style == 'iso':
+ g ('set contour')
+ g.set_range ('xrange', (0,3000))
+ g.set_range ('yrange', (0,2100))
+ if zrange:
+ g.set_range ('zrange', zrange)
+ x = arange (25, 3000, 50)
+ y = arange (25, 2100, 50)
+ # Plot:
+ if plot == 'prec':
+ g ('set cntrparam levels discrete 5, 10, 20, 30, 40, 50, 100, 150, 200, 500')
+ g ('set cbrange [0:100]')
+ g.splot (Gnuplot.funcutils.compute_GridData (x, y,
+ lambda x, y: compute_prec (Ba, Bb, array ([x, y]), method, prec), binary=0))
+ else:
+ g.splot (Gnuplot.funcutils.compute_GridData (x, y,
+ lambda x, y: trace (Ba, Bb, array ([x, y]), method, plot, 1), binary=0))
+ # Hardcopy:
+ if hardcopy:
+ g.hardcopy (filename = hardcopy, terminal = 'png')
+ if not persist:
+ raw_input ("Pause...")
diff --git a/digital/beacon/others/triangle_beacon/doc/triangle_drawing.svg b/digital/beacon/others/triangle_beacon/doc/triangle_drawing.svg
new file mode 100644
index 00000000..e501d427
--- /dev/null
+++ b/digital/beacon/others/triangle_beacon/doc/triangle_drawing.svg
@@ -0,0 +1,578 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="triangle_drawing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/nico/robot/beacon_triangulation.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ version="1.1">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Send"
+ style="overflow:visible;">
+ <path
+ id="path4976"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.3) rotate(180) translate(-2.3,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path3249"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Sstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Sstart"
+ style="overflow:visible">
+ <path
+ id="path3252"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.3) translate(-2.3,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ id="path3246"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path3222"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8) translate(12.5,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="6.1230318e-14 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.2212581"
+ inkscape:cx="240.46582"
+ inkscape:cy="865"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1366"
+ inkscape:window-height="753"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2387"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="background"
+ sodipodi:insensitive="true">
+ <rect
+ style="opacity:1;fill:#0c81c6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect2415"
+ width="300"
+ height="210"
+ x="90"
+ y="82.362183" />
+ </g>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="display:inline;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50000000000000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;overflow:visible"
+ id="rect3191"
+ width="10"
+ height="10"
+ x="390"
+ y="72.362183" />
+ <rect
+ style="fill:#e75130;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3197"
+ width="30"
+ height="30"
+ x="113.84435"
+ y="298.74231"
+ transform="matrix(0.7868701,-0.6171187,0.6171187,0.7868701,0,0)" />
+ <rect
+ style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3199"
+ width="10"
+ height="10"
+ x="123.84435"
+ y="308.74231"
+ transform="matrix(0.7868701,-0.6171187,0.6171187,0.7868701,0,0)" />
+ <rect
+ style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3193"
+ width="10"
+ height="10"
+ x="390"
+ y="292.36218" />
+ <rect
+ style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3195"
+ width="10"
+ height="10"
+ x="80"
+ y="182.36218" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 295,167.36218 L 395,77.362183"
+ id="path3209"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 295,167.36218 L 395,297.36218"
+ id="path3211"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 295,167.36218 L 85,187.36218"
+ id="path3213"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g6160"
+ transform="translate(120,100)">
+ <text
+ id="text6129"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="162.36218"
+ x="255"
+ id="tspan6131"
+ sodipodi:role="line">α</tspan></text>
+ <text
+ id="text6149"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="164.36218"
+ x="263"
+ id="tspan6151"
+ sodipodi:role="line">1</tspan></text>
+ </g>
+ <g
+ id="g7835"
+ transform="translate(152,-17)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="200"
+ y="117.36218"
+ id="text6168"><tspan
+ sodipodi:role="line"
+ id="tspan6170"
+ x="200"
+ y="117.36218">α</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="208"
+ y="119.36218"
+ id="text6172"><tspan
+ sodipodi:role="line"
+ id="tspan6174"
+ x="208"
+ y="119.36218">2</tspan></text>
+ </g>
+ <g
+ id="g7841"
+ transform="translate(-80,-5)">
+ <text
+ id="text6178"
+ y="200.36218"
+ x="197"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="200.36218"
+ x="197"
+ id="tspan6180"
+ sodipodi:role="line">α</tspan></text>
+ <text
+ id="text6182"
+ y="202.36218"
+ x="205"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="202.36218"
+ x="205"
+ id="tspan6184"
+ sodipodi:role="line">3</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="405"
+ y="302.36218"
+ id="text6194"><tspan
+ sodipodi:role="line"
+ id="tspan6196"
+ x="405"
+ y="302.36218">B1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="405"
+ y="82.362183"
+ id="text6198"><tspan
+ sodipodi:role="line"
+ id="tspan6200"
+ x="405"
+ y="82.362183">B2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="60"
+ y="192.36218"
+ id="text6202"><tspan
+ sodipodi:role="line"
+ id="tspan6204"
+ x="60"
+ y="192.36218">B3</tspan></text>
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mstart);marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 90,272.36218 L 90,292.36218 L 110,292.36218"
+ id="path6206" />
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="109.84116"
+ y="287.63474"
+ id="text7807"><tspan
+ sodipodi:role="line"
+ id="tspan7809"
+ x="109.84116"
+ y="287.63474">x</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="94.862816"
+ y="268.49576"
+ id="text7811"><tspan
+ sodipodi:role="line"
+ id="tspan7813"
+ x="94.862816"
+ y="268.49576">y</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Notation"
+ style="display:inline">
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 85,187.36218 L 395,77.362183 L 395,297.36218 L 85,187.36218 z"
+ id="path2427" />
+ <g
+ id="g3223"
+ transform="translate(30.710336,6.442031)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="200"
+ y="117.36218"
+ id="text3225"><tspan
+ sodipodi:role="line"
+ id="tspan3227"
+ x="200"
+ y="117.36218">b</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="208"
+ y="119.36218"
+ id="text3229"><tspan
+ sodipodi:role="line"
+ id="tspan3231"
+ x="208"
+ y="119.36218">2</tspan></text>
+ </g>
+ <g
+ transform="translate(35,52)"
+ id="g3233">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="197"
+ y="200.36218"
+ id="text3235"><tspan
+ sodipodi:role="line"
+ id="tspan3237"
+ x="197"
+ y="200.36218">b</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="205"
+ y="202.36218"
+ id="text3239"><tspan
+ sodipodi:role="line"
+ id="tspan3241"
+ x="205"
+ y="202.36218">3</tspan></text>
+ </g>
+ <g
+ transform="translate(143,28)"
+ id="g3253">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="255"
+ y="162.36218"
+ id="text3255"><tspan
+ sodipodi:role="line"
+ id="tspan3257"
+ x="255"
+ y="162.36218">b</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="263"
+ y="164.36218"
+ id="text3259"><tspan
+ sodipodi:role="line"
+ id="tspan3261"
+ x="263"
+ y="164.36218">1</tspan></text>
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3339"
+ sodipodi:cx="395"
+ sodipodi:cy="77.362183"
+ sodipodi:rx="30"
+ sodipodi:ry="30"
+ d="M 371.60222,96.138332 A 30,30 0 0 1 367.10491,88.401385"
+ sodipodi:start="2.465344"
+ sodipodi:end="2.7647641"
+ sodipodi:open="true" />
+ <path
+ sodipodi:open="true"
+ sodipodi:end="2.3489533"
+ sodipodi:start="1.6405728"
+ d="M 392.9084,107.28918 A 30,30 0 0 1 373.94096,98.728437"
+ sodipodi:ry="30"
+ sodipodi:rx="30"
+ sodipodi:cy="77.362183"
+ sodipodi:cx="395"
+ id="path6820"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <g
+ transform="translate(120,-45)"
+ id="g6854">
+ <text
+ sodipodi:linespacing="125%"
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="255"
+ y="162.36218"
+ id="text6856"><tspan
+ sodipodi:role="line"
+ id="tspan6864"
+ x="255"
+ y="162.36218">β</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="263"
+ y="164.36218"
+ id="text6860"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6866"
+ x="263"
+ y="164.36218">2</tspan></text>
+ </g>
+ <path
+ sodipodi:open="true"
+ sodipodi:end="2.746608"
+ sodipodi:start="2.3131503"
+ d="M 374.71927,99.46856 A 30,30 0 0 1 367.30993,88.906003"
+ sodipodi:ry="30"
+ sodipodi:rx="30"
+ sodipodi:cy="77.362183"
+ sodipodi:cx="395"
+ id="path6891"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1,0,0,-1,0,374.72437)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path6893"
+ sodipodi:cx="395"
+ sodipodi:cy="77.362183"
+ sodipodi:rx="30"
+ sodipodi:ry="30"
+ d="M 392.9084,107.28918 A 30,30 0 0 1 377.89384,102.00725"
+ sodipodi:start="1.6405728"
+ sodipodi:end="2.1775522"
+ sodipodi:open="true"
+ transform="matrix(1,0,0,-1,0,374.72437)" />
+ <g
+ id="g6910"
+ transform="translate(102,113)">
+ <text
+ id="text6912"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ y="162.36218"
+ x="255"
+ id="tspan6914"
+ sodipodi:role="line">β</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text6916"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ id="tspan6918"
+ sodipodi:role="line"
+ x="263"
+ y="164.36218">1</tspan></text>
+ </g>
+ <path
+ transform="matrix(1,0,0,-1,-310,264.72437)"
+ sodipodi:end="6.3275228"
+ sodipodi:start="5.9954464"
+ d="M 423.76664,68.848638 A 30,30 0 0 1 424.97052,78.691872"
+ sodipodi:ry="30"
+ sodipodi:rx="30"
+ sodipodi:cy="77.362183"
+ sodipodi:cx="395"
+ id="path6930"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ sodipodi:open="true" />
+ <path
+ sodipodi:open="true"
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path6932"
+ sodipodi:cx="395"
+ sodipodi:cy="77.362183"
+ sodipodi:rx="30"
+ sodipodi:ry="30"
+ d="M 424.82708,80.578589 A 30,30 0 0 1 423.36853,87.120603"
+ sodipodi:start="0.10742"
+ sodipodi:end="0.33130854"
+ transform="matrix(1,0,0,-1,-310,264.72437)" />
+ <g
+ transform="translate(-148,8)"
+ id="g6946">
+ <text
+ sodipodi:linespacing="125%"
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="255"
+ y="162.36218"
+ id="text6948"><tspan
+ sodipodi:role="line"
+ id="tspan6950"
+ x="255"
+ y="162.36218">β</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="263"
+ y="164.36218"
+ id="text6952"
+ sodipodi:linespacing="125%"><tspan
+ y="164.36218"
+ x="263"
+ sodipodi:role="line"
+ id="tspan6954">3</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="332.43591"
+ y="125.3694"
+ id="text6996"><tspan
+ sodipodi:role="line"
+ id="tspan6998"
+ x="332.43591"
+ y="125.3694" /></text>
+ </g>
+</svg>
diff --git a/digital/beacon/others/triangle_robot/doc/triangle.plot b/digital/beacon/others/triangle_robot/doc/triangle.plot
new file mode 100644
index 00000000..8a104b9b
--- /dev/null
+++ b/digital/beacon/others/triangle_robot/doc/triangle.plot
@@ -0,0 +1,80 @@
+set angles degrees
+set xrange [0:3000]
+set yrange [0:2100]
+dist (x0, y0, x1, y1) = sqrt ((x0 - x1) ** 2 + (y0 - y1) ** 2)
+dot (x0, y0, x1, y1) = x0 * x1 + y0 * y1
+anglea (x, y, x0, y0, x1, y1) = acos (dot (x0 - x, y0 - y, x1 - x, y1 - y) / (dist (x, y, x0, y0) * dist (x, y, x1, y1)))
+angle (x, y, x0, y0, x1, y1) = ((x0 - x) * (y1 - y) - (x1 - x) * (y0 - y) > 0 ? anglea (x, y, x0, y0, x1, y1) : 360 - anglea (x, y, x0, y0, x1, y1))
+angle_b12 (x, y) = angle (x, y, 3000, 0, 3000, 2100)
+angle_b23 (x, y) = angle (x, y, 3000, 0, 0, 1050)
+angle_b31 (x, y) = angle (x, y, 3000, 2100, 0, 1050)
+
+t1 = angle (3000, 0, 3000, 2100, 0, 1050)
+t2 = angle (3000, 2100, 0, 1050, 3000, 0)
+t3 = angle (0, 1050, 3000, 0, 3000, 2100)
+b1 = dist (3000, 0, 3000, 2100)
+b2 = dist (3000, 2100, 0, 1050)
+b3 = dist (0, 1050, 3000, 0)
+
+solve_angle (a1, a3) = atan ((-b1 + b3 * sin (a3 + t2) / sin (a3)) / (b1 * cos (a1) / sin (a1) + b3 * cos (a3 + t1) / sin (a3)))
+
+set isosamples 50
+set contour
+set cntrparam levels incremental 0, 10, 360
+
+set term png
+set output 'triangle_surf12.png'
+splot angle_b12 (x, y)
+set output 'triangle_surf23.png'
+splot angle_b23 (x, y)
+set output 'triangle_surf31.png'
+splot angle_b31 (x, y)
+
+set contour
+set cntrparam levels incremental 0, 1, 360
+unset surface
+set view map
+unset clabel
+
+set output 'triangle_contour12.png'
+splot angle_b12 (x, y)
+set output 'triangle_contour23.png'
+splot angle_b23 (x, y)
+set output 'triangle_contour31.png'
+splot angle_b31 (x, y)
+set output 'triangle_contour123.png'
+splot angle_b12 (x, y), angle_b23 (x, y), angle_b31 (x, y)
+set cntrparam levels incremental 0, 3, 360
+set output 'triangle_contour123-3deg.png'
+splot angle_b12 (x, y), angle_b23 (x, y), angle_b31 (x, y)
+set cntrparam levels incremental 0, 1, 360
+
+set size square
+set xrange [0:100]
+set yrange [0:100]
+set output 'triangle_zoom+0+0.png'
+splot angle_b12 (x, y), angle_b23 (x, y), angle_b31 (x, y)
+set xrange [0:100]
+set yrange [1000:1100]
+set output 'triangle_zoom+0+1050.png'
+splot angle_b12 (x, y), angle_b23 (x, y), angle_b31 (x, y)
+set xrange [2900:3000]
+set yrange [2000:2100]
+set output 'triangle_zoom+3000+2100.png'
+splot angle_b12 (x, y), angle_b23 (x, y), angle_b31 (x, y)
+set xrange [1450:1550]
+set yrange [1000:1100]
+set output 'triangle_zoom+1500+1050.png'
+splot angle_b12 (x, y), angle_b23 (x, y), angle_b31 (x, y)
+
+reset
+set xrange [0:3000]
+set yrange [0:2100]
+set isosamples 50
+set angles degrees
+set contour
+set cntrparam levels incremental 0, 5, 360
+
+set term png
+set output 'triangle_solve_angle.png'
+splot solve_angle (angle_b12 (x, y), angle_b31 (x, y))
diff --git a/digital/beacon/others/triangle_robot/doc/triangle.py b/digital/beacon/others/triangle_robot/doc/triangle.py
new file mode 100644
index 00000000..0471a417
--- /dev/null
+++ b/digital/beacon/others/triangle_robot/doc/triangle.py
@@ -0,0 +1,186 @@
+# Triangle - Triangulation beacon system study. {{{
+#
+# Copyright (C) 2009 Nicolas Schodet
+#
+# APBTeam:
+# Web: http://apbteam.org/
+# Email: team AT apbteam DOT org
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# }}}
+from math import *
+from numpy import *
+import Gnuplot, Gnuplot.funcutils
+
+B1 = array ([3000, 0])
+B2 = array ([3000, 2100])
+B3 = array ([0, 2100 / 2])
+
+def norm (v):
+ """Compute vector norm."""
+ return sqrt (sum (v ** 2))
+
+def rotate (v):
+ """Rotate a vector by pi/2."""
+ return array ([-v[1], v[0]])
+
+def angle (o, a, b):
+ """Compute angle (v_oa, v_ob)."""
+ v_oa = a - o
+ v_ob = b - o
+ # Use dot product to compute angle.
+ angle = acos (dot (v_oa, v_ob) / (norm (v_oa) * norm (v_ob)))
+ # Use cross product to determine angle sign.
+ if v_oa[0] * v_ob[1] - v_ob[0] * v_oa[1] >= 0:
+ return angle
+ else:
+ return 2 * pi - angle
+
+theta1 = angle (B1, B2, B3)
+theta2 = angle (B2, B3, B1)
+theta3 = angle (B3, B1, B2)
+b1 = norm (B1 - B2)
+b2 = norm (B2 - B3)
+b3 = norm (B3 - B1)
+
+def solve1 (alpha1, alpha2, alpha3):
+ """Solve using beta1."""
+ beta1 = atan (
+ (-b1 + b3 * sin (alpha3 + theta2) / sin (alpha3))
+ / (b1 * cos (alpha1) / sin (alpha1)
+ + b3 * cos (alpha3 + theta1) / sin (alpha3))
+ )
+ a1 = sin (pi - beta1 - alpha1) * b1 / sin (alpha1)
+ o = array ([B1[0] - sin (beta1) * a1, B1[1] + cos (beta1) * a1])
+ return (o, beta1, a1)
+
+def solve2 (alpha1, alpha2, alpha3):
+ """Solve using beta2 (rotation of solve1)."""
+ beta2 = atan (
+ (-b2 + b1 * sin (alpha1 + theta3) / sin (alpha1))
+ / (b2 * cos (alpha2) / sin (alpha2)
+ + b1 * cos (alpha1 + theta2) / sin (alpha1))
+ )
+ a2 = sin (pi - beta2 - alpha2) * b2 / sin (alpha2)
+ o = array ([B2[0] - sin (theta2 - beta2) * a2, B2[1] - cos (theta2 - beta2) * a2])
+ return (o, beta2, a2)
+
+def solve2m (alpha1, alpha2, alpha3):
+ """Solve using gamma1 (mirror of solve1)."""
+ gamma1 = atan (
+ (-b1 + b2 * sin (alpha2 + theta1) / sin (alpha2))
+ / (b1 * cos (alpha1) / sin (alpha1)
+ + b2 * cos (alpha2 + theta2) / sin (alpha2))
+ )
+ a2 = sin (pi - gamma1 - alpha1) * b1 / sin (alpha1)
+ o = array ([B2[0] - sin (gamma1) * a2, B2[1] - cos (gamma1) * a2])
+ return (o, gamma1, a2)
+
+def solve3 (alpha1, alpha2, alpha3):
+ """Solve using beta3 (rotation of solve1)."""
+ beta3 = atan (
+ (-b3 + b2 * sin (alpha2 + theta1) / sin (alpha2))
+ / (b3 * cos (alpha3) / sin (alpha3)
+ + b2 * cos (alpha2 + theta3) / sin (alpha2))
+ )
+ a3 = sin (pi - beta3 - alpha3) * b3 / sin (alpha3)
+ o = array ([B3[0] - cos (beta3 - theta3 / 2) * a3, B3[1] + sin (beta3 - theta3 / 2) * a3])
+ return (o, beta3, a3)
+
+def solve_cvra (alpha1, alpha2, alpha3):
+ """Solve using CVRA method, slightly modified for simpler vector based
+ computations."""
+ # Find circle on which B1, B2 and o are located.
+ v = (B2 - B1) / 2
+ cc2 = B1 + v + rotate (v) / tan (alpha1)
+ # Find circle on which B1, B3 and o are located.
+ v = (B3 - B1) / 2
+ cc1 = B1 + v - rotate (v) / tan (alpha3)
+ # Find the circles intersection... knowing that B1 is a solution.
+ v = cc2 - B1
+ n = (cc1 - cc2) / norm (cc1 - cc2)
+ o = B1 + (v + n * dot (-v, n)) * 2
+ return (o, cc2[0], cc2[1], cc1[0], cc1[1])
+
+def trace (o, f, output, factor):
+ """Trace f()[output] * factor for alphan corresponding to the point o."""
+ # Compute angles.
+ alpha1 = angle (o, B1, B2)
+ alpha2 = angle (o, B2, B3)
+ alpha3 = angle (o, B3, B1)
+ # Return.
+ return f (alpha1, alpha2, alpha3)[output] * factor
+
+def compute_prec (o, f, prec):
+ """Return an aproximation of distance error with the given angle error."""
+ # Compute angles.
+ alpha1 = angle (o, B1, B2)
+ alpha2 = angle (o, B2, B3)
+ alpha3 = angle (o, B3, B1)
+ # Evaluate error.
+ e = 0
+ for i in ((-1, -1, -1), (-1, -1, 1), (-1, 1, -1), (-1, 1, 1),
+ (1, -1, -1), (1, -1, 1), (1, 1, -1), (1, 1, 1)):
+ o2 = f (alpha1 + i[0] * prec, alpha2 + i[1] * prec, alpha3 + i[2] * prec)[0]
+ e = max (norm (o - o2), e)
+ return e
+
+if __name__ == '__main__':
+ # Parameters.
+ method = solve_cvra
+ prec = 2 * pi / 2200
+ plot = 'prec'
+ style = '3d'
+ hardcopy = None
+ zrange = (0, 150)
+ # Setup gnuplot.
+ persist = False
+ g = Gnuplot.Gnuplot (persist = persist)
+ g ('set term x11')
+ g ('set data style lines')
+ if style == '3d':
+ pass
+ else:
+ g ('set view map')
+ g ('set nosurface')
+ if style == 'map':
+ g ('set pm3d')
+ elif style == 'iso':
+ g ('set contour')
+ g.set_range ('xrange', (0,3000))
+ g.set_range ('yrange', (0,2100))
+ if zrange:
+ g.set_range ('zrange', zrange)
+ x = arange (25, 3000, 50)
+ y = arange (25, 2100, 50)
+ # Plot:
+ if plot == 'angle':
+ g ('set cntrparam levels incremental 0, 5, 360')
+ g.splot (Gnuplot.funcutils.compute_GridData (x, y,
+ lambda x, y: trace (array ([x, y]), method, 1, 180 / pi), binary=0))
+ elif plot == 'prec':
+ g ('set cntrparam levels discrete 5, 10, 20, 30, 40, 50, 100, 150, 200, 500')
+ g ('set cbrange [0:100]')
+ g.splot (Gnuplot.funcutils.compute_GridData (x, y,
+ lambda x, y: compute_prec (array ([x, y]), method, prec), binary=0))
+ else:
+ g.splot (Gnuplot.funcutils.compute_GridData (x, y,
+ lambda x, y: trace (array ([x, y]), method, plot, 1), binary=0))
+ # Hardcopy:
+ if hardcopy:
+ g.hardcopy (filename = hardcopy, terminal = 'png')
+ if not persist:
+ raw_input ("Pause...")
diff --git a/digital/beacon/others/triangle_robot/doc/triangle_drawing.svg b/digital/beacon/others/triangle_robot/doc/triangle_drawing.svg
new file mode 100644
index 00000000..32ea9e5b
--- /dev/null
+++ b/digital/beacon/others/triangle_robot/doc/triangle_drawing.svg
@@ -0,0 +1,877 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="triangle_drawing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/nico/robot/beacon_triangulation.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Send"
+ style="overflow:visible;">
+ <path
+ id="path4976"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.3) rotate(180) translate(-2.3,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path3249"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Sstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Sstart"
+ style="overflow:visible">
+ <path
+ id="path3252"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.3) translate(-2.3,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ id="path3246"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path3222"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8) translate(12.5,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="6.1230318e-14 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.4034707"
+ inkscape:cx="259.37386"
+ inkscape:cy="865"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1024"
+ inkscape:window-height="760"
+ inkscape:window-x="0"
+ inkscape:window-y="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2387"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="background"
+ sodipodi:insensitive="true">
+ <rect
+ style="opacity:1;fill:#0c81c6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect2415"
+ width="300"
+ height="210"
+ x="90"
+ y="82.362183" />
+ </g>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="display:inline;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50000000000000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;overflow:visible"
+ id="rect3191"
+ width="10"
+ height="10"
+ x="390"
+ y="72.362183" />
+ <rect
+ style="fill:#e75130;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3197"
+ width="30"
+ height="30"
+ x="113.84435"
+ y="298.74231"
+ transform="matrix(0.7868701,-0.6171187,0.6171187,0.7868701,0,0)" />
+ <rect
+ style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3199"
+ width="10"
+ height="10"
+ x="123.84435"
+ y="308.74231"
+ transform="matrix(0.7868701,-0.6171187,0.6171187,0.7868701,0,0)" />
+ <rect
+ style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3193"
+ width="10"
+ height="10"
+ x="390"
+ y="292.36218" />
+ <rect
+ style="opacity:1;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3195"
+ width="10"
+ height="10"
+ x="80"
+ y="182.36218" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 295,167.36218 L 395,77.362183"
+ id="path3209"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 295,167.36218 L 395,297.36218"
+ id="path3211"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 295,167.36218 L 85,187.36218"
+ id="path3213"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:0;fill-rule:nonzero;stroke:#000000;stroke-width:0.57245082;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3217"
+ sodipodi:cx="215"
+ sodipodi:cy="157.36218"
+ sodipodi:rx="28.62254"
+ sodipodi:ry="28.62254"
+ d="M 238.71975,141.34272 A 28.62254,28.62254 0 0 1 235.40534,177.43385"
+ transform="matrix(0.8734375,0,0,0.8734375,107.21094,29.916151)"
+ sodipodi:start="5.6891859"
+ sodipodi:end="7.0603401"
+ sodipodi:open="true" />
+ <path
+ sodipodi:end="5.4321285"
+ sodipodi:start="3.1830469"
+ transform="matrix(0.8734375,0,0,0.8734375,107.21094,29.916151)"
+ d="M 186.40205,156.176 A 28.62254,28.62254 0 0 1 233.86766,135.83868"
+ sodipodi:ry="28.62254"
+ sodipodi:rx="28.62254"
+ sodipodi:cy="157.36218"
+ sodipodi:cx="215"
+ id="path6111"
+ style="fill:none;fill-opacity:0;fill-rule:nonzero;stroke:#000000;stroke-width:0.57245082;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ sodipodi:open="true" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:0;fill-rule:nonzero;stroke:#000000;stroke-width:0.57245082;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path6113"
+ sodipodi:cx="215"
+ sodipodi:cy="157.36218"
+ sodipodi:rx="28.62254"
+ sodipodi:ry="28.62254"
+ d="M 229.47537,182.05456 A 28.62254,28.62254 0 0 1 186.95311,163.07373"
+ transform="matrix(0.8734375,0,0,0.8734375,107.21094,29.916151)"
+ sodipodi:start="1.0405648"
+ sodipodi:end="2.9406968"
+ sodipodi:open="true" />
+ <g
+ id="g6160"
+ transform="translate(67,7.9999996)">
+ <text
+ id="text6129"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="162.36218"
+ x="255"
+ id="tspan6131"
+ sodipodi:role="line">α</tspan></text>
+ <text
+ id="text6149"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="164.36218"
+ x="263"
+ id="tspan6151"
+ sodipodi:role="line">1</tspan></text>
+ </g>
+ <g
+ id="g7835"
+ transform="translate(80,22)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="200"
+ y="117.36218"
+ id="text6168"><tspan
+ sodipodi:role="line"
+ id="tspan6170"
+ x="200"
+ y="117.36218">α</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="208"
+ y="119.36218"
+ id="text6172"><tspan
+ sodipodi:role="line"
+ id="tspan6174"
+ x="208"
+ y="119.36218">2</tspan></text>
+ </g>
+ <g
+ id="g7841"
+ transform="translate(85,-4e-7)">
+ <text
+ id="text6178"
+ y="200.36218"
+ x="197"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="200.36218"
+ x="197"
+ id="tspan6180"
+ sodipodi:role="line">α</tspan></text>
+ <text
+ id="text6182"
+ y="202.36218"
+ x="205"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="202.36218"
+ x="205"
+ id="tspan6184"
+ sodipodi:role="line">3</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="405"
+ y="302.36218"
+ id="text6194"><tspan
+ sodipodi:role="line"
+ id="tspan6196"
+ x="405"
+ y="302.36218">B1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="405"
+ y="82.362183"
+ id="text6198"><tspan
+ sodipodi:role="line"
+ id="tspan6200"
+ x="405"
+ y="82.362183">B2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="60"
+ y="192.36218"
+ id="text6202"><tspan
+ sodipodi:role="line"
+ id="tspan6204"
+ x="60"
+ y="192.36218">B3</tspan></text>
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Mstart);marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 90,272.36218 L 90,292.36218 L 110,292.36218"
+ id="path6206" />
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="109.84116"
+ y="287.63474"
+ id="text7807"><tspan
+ sodipodi:role="line"
+ id="tspan7809"
+ x="109.84116"
+ y="287.63474">x</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="94.862816"
+ y="268.49576"
+ id="text7811"><tspan
+ sodipodi:role="line"
+ id="tspan7813"
+ x="94.862816"
+ y="268.49576">y</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Notation"
+ style="display:inline">
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 85,187.36218 L 395,77.362183 L 395,297.36218 L 85,187.36218 z"
+ id="path2427" />
+ <g
+ id="g3223"
+ transform="translate(30.710336,6.442031)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="200"
+ y="117.36218"
+ id="text3225"><tspan
+ sodipodi:role="line"
+ id="tspan3227"
+ x="200"
+ y="117.36218">b</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="208"
+ y="119.36218"
+ id="text3229"><tspan
+ sodipodi:role="line"
+ id="tspan3231"
+ x="208"
+ y="119.36218">2</tspan></text>
+ </g>
+ <g
+ transform="translate(35,52)"
+ id="g3233">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="197"
+ y="200.36218"
+ id="text3235"><tspan
+ sodipodi:role="line"
+ id="tspan3237"
+ x="197"
+ y="200.36218">b</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="205"
+ y="202.36218"
+ id="text3239"><tspan
+ sodipodi:role="line"
+ id="tspan3241"
+ x="205"
+ y="202.36218">3</tspan></text>
+ </g>
+ <g
+ transform="translate(143,28)"
+ id="g3253">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="255"
+ y="162.36218"
+ id="text3255"><tspan
+ sodipodi:role="line"
+ id="tspan3257"
+ x="255"
+ y="162.36218">b</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="263"
+ y="164.36218"
+ id="text3259"><tspan
+ sodipodi:role="line"
+ id="tspan3261"
+ x="263"
+ y="164.36218">1</tspan></text>
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3339"
+ sodipodi:cx="395"
+ sodipodi:cy="77.362183"
+ sodipodi:rx="30"
+ sodipodi:ry="30"
+ d="M 371.60222,96.138332 A 30,30 0 0 1 367.10491,88.401385"
+ sodipodi:start="2.465344"
+ sodipodi:end="2.7647641"
+ sodipodi:open="true" />
+ <path
+ sodipodi:open="true"
+ sodipodi:end="2.3489533"
+ sodipodi:start="1.6405728"
+ d="M 392.9084,107.28918 A 30,30 0 0 1 373.94096,98.728437"
+ sodipodi:ry="30"
+ sodipodi:rx="30"
+ sodipodi:cy="77.362183"
+ sodipodi:cx="395"
+ id="path6820"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path6822"
+ sodipodi:cx="395"
+ sodipodi:cy="77.362183"
+ sodipodi:rx="50"
+ sodipodi:ry="50"
+ d="M 392.36869,127.2929 A 50,50 0 0 1 348.68531,96.202285"
+ sodipodi:start="1.6234469"
+ sodipodi:end="2.7552512"
+ sodipodi:open="true" />
+ <g
+ id="g6842"
+ transform="translate(119,-50)">
+ <text
+ id="text6844"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6852"
+ x="255"
+ y="162.36218">γ</tspan></text>
+ <text
+ id="text6848"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="164.36218"
+ x="263"
+ id="tspan6850"
+ sodipodi:role="line">1</tspan></text>
+ </g>
+ <g
+ transform="translate(103,-62)"
+ id="g6854">
+ <text
+ sodipodi:linespacing="125%"
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="255"
+ y="162.36218"
+ id="text6856"><tspan
+ sodipodi:role="line"
+ id="tspan6864"
+ x="255"
+ y="162.36218">β</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="263"
+ y="164.36218"
+ id="text6860"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6866"
+ x="263"
+ y="164.36218">2</tspan></text>
+ </g>
+ <g
+ id="g6868"
+ transform="translate(99,-38)">
+ <text
+ id="text6870"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6878"
+ x="255"
+ y="162.36218">θ</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text6874"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ id="tspan6876"
+ sodipodi:role="line"
+ x="263"
+ y="164.36218">2</tspan></text>
+ </g>
+ <path
+ sodipodi:open="true"
+ sodipodi:end="2.746608"
+ sodipodi:start="2.3131503"
+ d="M 374.71927,99.46856 A 30,30 0 0 1 367.30993,88.906003"
+ sodipodi:ry="30"
+ sodipodi:rx="30"
+ sodipodi:cy="77.362183"
+ sodipodi:cx="395"
+ id="path6891"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1,0,0,-1,0,374.72437)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path6893"
+ sodipodi:cx="395"
+ sodipodi:cy="77.362183"
+ sodipodi:rx="30"
+ sodipodi:ry="30"
+ d="M 392.9084,107.28918 A 30,30 0 0 1 377.89384,102.00725"
+ sodipodi:start="1.6405728"
+ sodipodi:end="2.1775522"
+ sodipodi:open="true"
+ transform="matrix(1,0,0,-1,0,374.72437)" />
+ <path
+ sodipodi:open="true"
+ sodipodi:end="2.7552512"
+ sodipodi:start="1.6234469"
+ d="M 392.36869,127.2929 A 50,50 0 0 1 348.68531,96.202285"
+ sodipodi:ry="50"
+ sodipodi:rx="50"
+ sodipodi:cy="77.362183"
+ sodipodi:cx="395"
+ id="path6895"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1,0,0,-1,0,374.72437)" />
+ <g
+ transform="translate(103,114)"
+ id="g6900">
+ <text
+ sodipodi:linespacing="125%"
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="255"
+ y="162.36218"
+ id="text6902"><tspan
+ y="162.36218"
+ x="255"
+ id="tspan6904"
+ sodipodi:role="line">γ</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="263"
+ y="164.36218"
+ id="text6906"><tspan
+ sodipodi:role="line"
+ id="tspan6908"
+ x="263"
+ y="164.36218">3</tspan></text>
+ </g>
+ <g
+ id="g6910"
+ transform="translate(120,102)">
+ <text
+ id="text6912"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ y="162.36218"
+ x="255"
+ id="tspan6914"
+ sodipodi:role="line">β</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text6916"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ id="tspan6918"
+ sodipodi:role="line"
+ x="263"
+ y="164.36218">1</tspan></text>
+ </g>
+ <g
+ transform="translate(105,85)"
+ id="g6920">
+ <text
+ sodipodi:linespacing="125%"
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="255"
+ y="162.36218"
+ id="text6922"><tspan
+ y="162.36218"
+ x="255"
+ id="tspan6924"
+ sodipodi:role="line">θ</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="263"
+ y="164.36218"
+ id="text6926"
+ sodipodi:linespacing="125%"><tspan
+ y="164.36218"
+ x="263"
+ sodipodi:role="line"
+ id="tspan6928">1</tspan></text>
+ </g>
+ <path
+ transform="matrix(1,0,0,-1,-310,264.72437)"
+ sodipodi:end="6.3275228"
+ sodipodi:start="5.9954464"
+ d="M 423.76664,68.848638 A 30,30 0 0 1 424.97052,78.691872"
+ sodipodi:ry="30"
+ sodipodi:rx="30"
+ sodipodi:cy="77.362183"
+ sodipodi:cx="395"
+ id="path6930"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ sodipodi:open="true" />
+ <path
+ sodipodi:open="true"
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path6932"
+ sodipodi:cx="395"
+ sodipodi:cy="77.362183"
+ sodipodi:rx="30"
+ sodipodi:ry="30"
+ d="M 424.82708,80.578589 A 30,30 0 0 1 423.36853,87.120603"
+ sodipodi:start="0.10742"
+ sodipodi:end="0.33130854"
+ transform="matrix(1,0,0,-1,-310,264.72437)" />
+ <path
+ transform="matrix(1,0,0,-1,-310,264.72437)"
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:url(#Arrow2Mstart);marker-mid:none;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path6934"
+ sodipodi:cx="395"
+ sodipodi:cy="77.362183"
+ sodipodi:rx="50"
+ sodipodi:ry="50"
+ d="M 442.47252,61.666317 A 50,50 0 0 1 442.75316,92.182294"
+ sodipodi:start="5.9638692"
+ sodipodi:end="6.5841087"
+ sodipodi:open="true" />
+ <g
+ id="g6936"
+ transform="translate(-143,8)">
+ <text
+ id="text6938"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6940"
+ x="255"
+ y="162.36218">γ</tspan></text>
+ <text
+ id="text6942"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="164.36218"
+ x="263"
+ id="tspan6944"
+ sodipodi:role="line">2</tspan></text>
+ </g>
+ <g
+ transform="translate(-138,33)"
+ id="g6946">
+ <text
+ sodipodi:linespacing="125%"
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="255"
+ y="162.36218"
+ id="text6948"><tspan
+ sodipodi:role="line"
+ id="tspan6950"
+ x="255"
+ y="162.36218">β</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="263"
+ y="164.36218"
+ id="text6952"
+ sodipodi:linespacing="125%"><tspan
+ y="164.36218"
+ x="263"
+ sodipodi:role="line"
+ id="tspan6954">3</tspan></text>
+ </g>
+ <g
+ id="g6956"
+ transform="translate(-118,33)">
+ <text
+ id="text6958"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6960"
+ x="255"
+ y="162.36218">θ</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text6962"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ id="tspan6964"
+ sodipodi:role="line"
+ x="263"
+ y="164.36218">3</tspan></text>
+ </g>
+ <g
+ id="g6966"
+ transform="translate(3,-28)">
+ <text
+ id="text6968"
+ y="200.36218"
+ x="197"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="200.36218"
+ x="197"
+ id="tspan6970"
+ sodipodi:role="line">a</tspan></text>
+ <text
+ id="text6972"
+ y="202.36218"
+ x="205"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="202.36218"
+ x="205"
+ id="tspan6974"
+ sodipodi:role="line">3</tspan></text>
+ </g>
+ <g
+ transform="translate(125,10)"
+ id="g6976">
+ <text
+ id="text6978"
+ y="117.36218"
+ x="200"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="117.36218"
+ x="200"
+ id="tspan6980"
+ sodipodi:role="line">a</tspan></text>
+ <text
+ id="text6982"
+ y="119.36218"
+ x="208"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="119.36218"
+ x="208"
+ id="tspan6984"
+ sodipodi:role="line">2</tspan></text>
+ </g>
+ <g
+ id="g6986"
+ transform="translate(85,60)">
+ <text
+ id="text6988"
+ y="162.36218"
+ x="255"
+ style="font-size:12px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="162.36218"
+ x="255"
+ id="tspan6990"
+ sodipodi:role="line">a</tspan></text>
+ <text
+ id="text6992"
+ y="164.36218"
+ x="263"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="164.36218"
+ x="263"
+ id="tspan6994"
+ sodipodi:role="line">1</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="332.43591"
+ y="125.3694"
+ id="text6996"><tspan
+ sodipodi:role="line"
+ id="tspan6998"
+ x="332.43591"
+ y="125.3694"></tspan></text>
+ </g>
+</svg>