C := C shifted shift;
% krok 2
- draw for i := 0 upto 3: A[i]-- endfor C for i := 4 upto 6: --A[i] endfor;
+ draw A[0] for i := 1 upto 6: --A[i] endfor;
+ draw A[4]{dir 70}..C;
+ draw A[4]{dir 45}..C;
draw C--A[2] dashed evenly withpen normalpen;
+ draw C--A[3] dashed evenly withpen normalpen;
for i := 1 upto 5: drawemptyvertex(A[i]); endfor
for i := 0 upto 2: draw vertex(B[i]); endfor
drawemptyvertex(C);
for i:=0 upto 10: draw_fish(B[i], 1, 0); endfor;
draw createpath(for i:=0 upto 9: A[i]-- endfor cycle) scaled 1.13 shifted (0.4cm,0) withpen boldpen;
endfig;
+
+figtag("provazkovy_algoritmus");
+beginfig(6);
+ pickup boldpen;
+ pair A[],B[],u; u := (-3cm, 0);
+ for i := 0 upto 3: A[i] := u rotated (-30*i) yscaled 0.7; endfor;
+ A[2] := A[2] + (0,0.1cm);
+ draw for i:=0 upto 2: A[i]-- endfor A[3];
+ drawarrow ((u/2) for i:=1 upto 3: ..u/2 rotated (-30*i) endfor) yscaled 0.7 withpen normalpen;
+ B[0] := (-2cm,0.5cm);
+ B[1] := (-1cm,1.5cm);
+ B[2] := (-0.5cm,0.2cm);
+ for i:=0 upto 2: draw vertex(B[i]); endfor
+
+ path ub; ub := (-20cm,3cm)--(20cm,3cm);
+
+ numeric ang[]; ang[0] = 90; ang[1] = angle(A[1]-A[0]); ang[2] = angle(A[2]-A[1]); ang[3] = angle(A[3]-A[2]);
+ for i:=0 upto 2:
+ draw reverse(dirs(A[i],ang[i],6cm) cutafter ub) withpen normalpen dashed evenly;
+ l := 1cm + (i-1)*0.2cm;
+ drawarrow from(A[i],ang[i],l)..from(A[i],(ang[i]+ang[i+1])/2,l)..from(A[i],ang[i+1],l) withpen normalpen;
+ endfor
+
+ for i:=0 upto 3: drawemptyvertex(A[i]); endfor;
+endfig;
+
+figtag("naslednik_pres_konvexni_obal");
+beginfig(7);
+ pair A[], C;
+ label.lrt(btex $Q_i$ etex, (1.5cm,-0.8cm));
+ pickup boldpen;
+
+ C := (-4cm,-0.3cm);
+ for i:=0 upto 6:
+ A[i] := (2cm,0) rotated (360*i/7+5) yscaled 0.7;
+ draw vertex(A[i]);
+ endfor;
+ draw for i:=0 upto 6: A[i]-- endfor cycle withpen normalpen;
+ draw C--A[2] dashed evenly;
+
+ draw dirs(C, -140, 0.5cm);
+ drawemptyvertex(A[2]);
+ drawemptyvertex(C);
+ drawdblarrow (fullcircle scaled 2cm rotated (360*2/7-5) yscaled 0.7) cutbefore (origin--(3cm,0) rotated (360*2/7+25)) withpen normalpen;
+ %drawarrow C+(0,0.5cm){dir 60}..A[2]+(0,0.5cm) withpen normalpen;
+ %drawarrow 0.6A[5]{dir 170}..(0.6A[3] rotated -15) withpen normalpen;
+ %drawarrow 0.7A[6]{dir 60}..(0.5A[1] rotated 30) withpen normalpen;
+endfig;
end
\>Uká¾eme si nìkolik základních algoritmù na øe¹ení geometrický problémù v~rovinì. Proè zrovna v~rovinì? Inu, jednorozmìrné problémy bývají triviální
a naopak pro vy¹¹í dimenze jsou velice komplikované. Rovina je proto rozumným kompromisem mezi obtí¾ností a zajímavostí.
-Celou kapitolou nás bude provázet pohádka ze ¾ivota letních medvìdù. Pokusíme se vyøe¹it jejich \uv{ka¾dodenní} problémy~\dots
+Celou kapitolou nás bude provázet pohádka ze ¾ivota ledních medvìdù. Pokusíme se vyøe¹it jejich \uv{ka¾dodenní} problémy~\dots
\h{Hledání konvexního obalu}
Proto¾e medvìdi z~na¹í pohádky rozhodnì nejsou ledajací a ani chytrost jim neschází, rozhodli se v¹echny ryby pochytat. Znají pøesná místa výskytu
ryb a rádi by vyrobili obrovskou sí», do které by je v¹echny chytili. Pomozte medvìdùm zjistit, jaký nejmen¹í obvod taková sí» mù¾e mít.}
-\figure{7-geom5_rybi_motivace.eps}{Problém ledních mìdvìdù: Jaký je nejmen¹í obvod sítì?}{2.5in}
+\figure{7-geom5_rybi_motivace.eps}{Problém ledních mìdvìdù: Jaký je nejmen¹í obvod sítì?}{3in}
Neboli v~øeèi matematické, chceme pro zadanou mno¾inu bodù v~rovinì nalézt její konvexní obal. Co je to konvexní obal? Mno¾ina bodù je {\I konvexní},
pokud pro ka¾dé dva body obsahuje i celou úseèku mezi nimi. {\I Konvexní obal} je nejmen¹í konvexní podmno¾ina roviny, která obsahuje v¹echny zadané
$k$-tého kroku algoritmu známe konvexní obal prvních $k$ bodù. Kdy¾ algoritmus skonèí, známe hledaný konvexní obal. Podle invariantu musíme v~$k$-tém
kroku pøidat do obalu $k$-tý nejlevìj¹í bod. Zbývá si jen rozmyslet, jak pøesnì tento bod pøidat.
-Poslední bod napojíme na nejbli¾¹í bod konvexního obalu, který je nad ním a pod ním. Èasto se v¹ak stane, ¾e obal pøestane být konvexní. To se dá v¹ak
-snadno napravit, staèí odebírat pøedcházející body tak dlouho, dokud nezískáme konvexní obal. Pøíklad pøidání bodu je na obrázku ní¾e. Mnohdy je
-potøeba odebrat i více ne¾ jeden bod.
+Pøidání dal¹ího bodu do konvexního obalu funguje, jak je naznaèeno na obrázku. Podle invariantu víme, ¾e bod nejvíc vpravo je souèástí konvexního
+obalu. Za nìj napojíme novì pøidávaný bod. Tím jsme získali nìjaký obal, ale zpravidla nebude konvexní. To lze v¹ak snadno napravit, staèí
+odebírat body, v obou smìrech podél konvexního obalu, tak dlouho, dokud nezískáme konvexní obal. Na pøíkladu z obrázku nemusíme po smìru hodinových
+ruèièek odebrat ani jeden bod, obal je v poøádku. Naopak proti smìru hodinových ruèièek musíme odebrat dokonce dva body.
\figure{7-geom2_pridani_bodu.eps}{Pøidání bodu do konvexního obalu.}{4.5in}
\figure{7-geom4_determinant.eps}{Jak vypadají determinanty rùzných znamének v~rovinì.}{4.6in}
\s{©lo by to vyøe¹it rychleji?} Také vám vrtá hlavou, zda existují rychlej¹í algoritmy? Nejrychlej¹í známý algoritmus, jeho¾ autorem je T.~Chan,
-funguje v~èase $\O(n \log h)$, kde $h$ je poèet bodù le¾ících v~konvexním obalu, a pøitom je pøekvapivì jednoduchý. Zde si naznaèíme, jak tento
+funguje v~èase $\O(n \log h)$, kde $h$ je poèet bodù le¾ících na konvexním obalu, a pøitom je pøekvapivì jednoduchý. Zde si naznaèíme, jak tento
algoritmus funguje.
Algoritmus pøichází s~následující my¹lenkou. Pøedpokládejme, ¾e bychom znali velikost konvexního obalu $h$. Rozdìlíme body libovolnì do $\lceil {n
\over h} \rceil$ mno¾in $Q_1, \ldots, Q_k$ tak, ¾e $\vert Q_i \vert \le h$. Pro ka¾dou z~tìchto mno¾in nalezneme konvexní obal pomocí vý¹e popsaného
-algoritmu. To doká¾eme pro jednu v~èase $\O(h \log h)$ a pro v¹echny v~èase $\O(n \log h)$. Nakonec vezmeme tyto konvexní obaly a pomocí jiného
-algoritmu je v~èase $\O(n \log h)$ spojíme do konvexního obalu celé mno¾iny.
+algoritmu. To doká¾eme pro jednu v~èase $\O(h \log h)$ a pro v¹echny v~èase $\O(n \log h)$. V druhé fázi spustíme hledání konvexního obalu pomocí
+provázkového algoritmu a pro zrychlení pou¾ijeme pøedpoèítané obaly men¹ích mno¾in. Nejprve popí¹eme jeho my¹lenku. Pou¾ijeme následující pozorování:
+
+\s{Pozorování:} Úseèka spojující dva body $a$ a $b$ le¾í na konvexním obalu, právì kdy¾ v¹echny ostatní body le¾í pouze na jedné její
+stranì.\foot{Formálnì je podmínka následující: Pøímka $ab$ urèuje dvì poloroviny. Úseèka le¾í na konvexním obalu, právì kdy¾ v¹echny body le¾í v jedné
+z polorovin.}
+
+Algoritmu se øíká {\I provázkový}, proto¾e svojí èinností pøipomíná namotávání provázku podél konvexního obalu. Zaèneme s bodem, který na konvexním
+obalu urèitì le¾í, to je tøeba ten nejlevìj¹í. V ka¾dém kroku nalezneme následující bod po obvodu konvexního obalu. To udìláme napøíklad tak, ¾e
+projdeme v¹echny body a vybereme ten, který svírá nejmen¹í úhel s poslední stranou konvexního obalu. Novì pøidaná úseèka vyhovuje pozorování a proto
+do konvexního obalu patøí. Po $h$ krocích dostaneme zpìt k nejlevìj¹ímu bodu a výpoèet ukonèíme. V ka¾dém kroku potøebujeme projít v¹echny body a
+vybrat následníka, co¾ doká¾eme v èase $\O(n)$. Celková slo¾itost algoritmu je tedy $\O(n \cdot h)$.
+
+\twofigures{7-geom6_provazkovy_algoritmus.eps}{Provázkový algoritmus.}{1.25in}
+ {7-geom7_naslednik_pres_konvexni_obal.eps}{Hledání kandidáta v pøedpoèítaném obalu}{2.5in}
+
+Provázkový algoritmus funguje, ale má jednu obrovskou nevýhodu -- je toti¾ ukrutnì pomalý. Ký¾eného zrychlení dosáhneme, pokud pou¾ijeme pøedpoèítané
+konvexní obaly. Ty umo¾ní rychleji hledat následníka. Pro ka¾dou z mno¾in $Q_i$ najdeme zvlá¹» kandidáta a poté z nich vybereme toho nejlep¹ího.
+Mo¾ný kandidát v¾dy le¾í na konvexním obalu mno¾iny $Q_i$. Vyu¾ijeme toho, ¾e body obalu jsou \uv{uspoøádané}, i kdy¾ trochu netypicky do kruhu.
+Kandidáta mù¾eme hledat metodou pùlení intervalu, i kdy¾ detaily jsou malièko slo¾itìj¹í ne¾ je obvyklé. Jak pùlit zjistíme podle smìru zatáèení
+konvexního obalu. Detaily si rozmyslí ètenáø sám.
+
+Èasová slo¾itost pùlení je $\O(\log h)$ pro jednu mno¾inu. Mno¾in je nejvý¹e $\O({n \over h})$, tedy následující bod konvexního obalu nalezneme v èase
+$\O({n \over h} \log h)$. Celý obal nalezneme ve slibovaném èase $\O(n \log h)$.
Popsanému algoritmu schází jedna dùle¾itá vìc: Ve skuteènosti vìt¹inou neznáme velikost $h$. Budeme proto algoritmus iterovat s~rostoucí hodnotou $h$,
dokud konvexní obal nesestrojíme. Pokud pøi slepování konvexních obalù zjistíme, ¾e konvexní obal je vìt¹í ne¾ $h$, výpoèet ukonèíme. Zbývá je¹tì
%%BoundingBox: -13 -35 216 12
%%HiResBoundingBox: -12.12236 -34.76685 215.33812 11.24376
%%Creator: MetaPost 0.993
-%%CreationDate: 2009.11.14:2207
+%%CreationDate: 2009.11.17:1821
%%Pages: 1
%*Font: cmmi10 9.96265 9.96265 6e:8
%*Font: cmr10 9.96265 9.96265 31:f008
%%BoundingBox: -49 -41 287 37
%%HiResBoundingBox: -48.93608 -40.43207 286.20425 36.75539
%%Creator: MetaPost 0.993
-%%CreationDate: 2009.11.14:2207
+%%CreationDate: 2009.11.17:1821
%%Pages: 1
%%BeginProlog
%%EndProlog
93.54338 34.01566 lineto
116.22063 28.34645 lineto
133.22824 5.6692 lineto
-155.90549 2.83482 lineto
138.89745 -19.84242 lineto
104.88179 -36.85048 lineto
87.87418 -39.68486 lineto stroke
+newpath 138.89745 -19.84242 moveto
+142.20024 -10.76814 148.11893 -2.87662 155.90549 2.83482 curveto stroke
+newpath 138.89745 -19.84242 moveto
+145.61255 -13.12732 151.33917 -5.49188 155.90549 2.83482 curveto stroke
0 0.59776 dtransform truncate idtransform setlinewidth pop
[3 3 ] 0 setdash
newpath 155.90549 2.83482 moveto
116.22063 28.34645 lineto stroke
+newpath 155.90549 2.83482 moveto
+133.22824 5.6692 lineto stroke
1 1 1 setrgbcolor
newpath 95.5359 34.01566 moveto
95.5359 34.54413 95.32594 35.05089 94.95229 35.42456 curveto
%%BoundingBox: -211 -75 37 66
%%HiResBoundingBox: -210.87447 -74.3254 36.12636 65.82135
%%Creator: MetaPost 0.993
-%%CreationDate: 2009.11.14:2207
+%%CreationDate: 2009.11.17:1821
%%Pages: 1
%*Font: cmmi10 9.96265 9.96265 4c:88
%*Font: csr10 9.96265 9.96265 61:d13640000000000000000000000000008008
%%BoundingBox: -81 -40 277 29
%%HiResBoundingBox: -80.36743 -39.59418 276.40172 28.59645
%%Creator: MetaPost 0.993
-%%CreationDate: 2009.11.14:2207
+%%CreationDate: 2009.11.17:1821
%%Pages: 1
%*Font: cmmi10 9.96265 9.96265 3c:a0004000020800602
%*Font: cmr10 9.96265 9.96265 28:c08004000000000c0008
%%BoundingBox: -214 -69 38 59
%%HiResBoundingBox: -213.63019 -68.29349 37.06538 58.48102
%%Creator: MetaPost 0.993
-%%CreationDate: 2009.11.14:2207
+%%CreationDate: 2009.11.17:1821
%%Pages: 1
%%BeginProlog
%%EndProlog
--- /dev/null
+%!PS
+%%BoundingBox: -88 -3 3 86
+%%HiResBoundingBox: -87.77908 -2.73973 2.73973 85.33824
+%%Creator: MetaPost 0.993
+%%CreationDate: 2009.11.17:1821
+%%Pages: 1
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor 0 1.4944 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath -85.03935 0 moveto
+-73.64644 29.76364 lineto
+-42.51968 54.3871 lineto
+0 59.52728 lineto stroke
+ 0 0.59776 dtransform truncate idtransform setlinewidth pop
+newpath -42.51968 0 moveto
+-42.51973 5.22461 -40.55508 10.35718 -36.82323 14.88182 curveto
+-33.09134 19.40651 -27.72371 23.16383 -21.25984 25.77615 curveto
+-14.79602 28.38843 -7.46376 29.76369 0 29.76364 curveto stroke
+newpath -3.64316 28.11188 moveto
+-2.45203 28.70012 -1.23642 29.2515 0 29.76364 curveto
+-1.23642 30.27582 -2.48584 30.7455 -3.74405 31.17184 curveto
+ closepath
+gsave fill grestore stroke
+ 0 3.98505 dtransform truncate idtransform setlinewidth pop
+newpath -56.6929 14.17323 moveto 0 0 rlineto stroke
+newpath -28.34645 42.51968 moveto 0 0 rlineto stroke
+newpath -14.17323 5.6692 moveto 0 0 rlineto stroke
+ 0.59776 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [3 3 ] 0 setdash
+newpath -85.03935 85.03935 moveto
+-85.03935 0 lineto stroke
+ 0 0.59776 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath -85.03935 22.67725 moveto
+-83.65663 22.67723 -82.27681 22.55075 -80.91713 22.29938 curveto
+-79.55757 22.04803 -78.22385 21.67288 -76.93262 21.1786 curveto stroke
+newpath -80.90599 20.7179 moveto
+-79.5978 20.98819 -78.26816 21.14238 -76.93262 21.1786 curveto
+-77.90259 22.09737 -78.9518 22.92856 -80.06795 23.6625 curveto
+ closepath
+gsave fill grestore stroke
+ [3 3 ] 0 setdash
+newpath -52.48845 85.03828 moveto
+-73.64644 29.76364 lineto stroke
+ [] 0 setdash
+newpath -63.51306 56.2368 moveto
+-61.14473 55.33046 -58.90877 54.11034 -56.86504 52.60915 curveto
+-54.82132 51.10796 -52.98831 49.33926 -51.41513 47.35042 curveto stroke
+newpath -55.0372 49.04776 moveto
+-53.79277 48.56853 -52.5823 48.00154 -51.41513 47.35042 curveto
+-51.78 48.63615 -52.235 49.89302 -52.77606 51.11185 curveto
+ closepath
+gsave fill grestore stroke
+ [3 3 ] 0 setdash
+newpath -3.77296 85.03891 moveto
+-42.51968 54.3871 lineto stroke
+ [] 0 setdash
+newpath -15.84218 75.49118 moveto
+-13.90816 73.04645 -12.31938 70.34744 -11.1205 67.46997 curveto
+-9.92165 64.59256 -9.12402 61.564 -8.75005 58.46933 curveto stroke
+newpath -10.91466 61.83304 moveto
+-10.12866 60.75647 -9.40573 59.6334 -8.75005 58.46933 curveto
+-8.39053 59.75609 -8.10757 61.0614 -7.90208 62.37842 curveto
+ closepath
+gsave fill grestore stroke
+ 1 1 1 setrgbcolor
+newpath -83.04683 0 moveto
+-83.04683 0.52847 -83.25679 1.03523 -83.63045 1.4089 curveto
+-84.00412 1.78256 -84.51088 1.99252 -85.03935 1.99252 curveto
+-85.56783 1.99252 -86.07458 1.78256 -86.44826 1.4089 curveto
+-86.82191 1.03523 -87.03188 0.52847 -87.03188 0 curveto
+-87.03188 -0.52847 -86.82191 -1.03523 -86.44826 -1.4089 curveto
+-86.07458 -1.78256 -85.56783 -1.99252 -85.03935 -1.99252 curveto
+-84.51088 -1.99252 -84.00412 -1.78256 -83.63045 -1.4089 curveto
+-83.25679 -1.03523 -83.04683 -0.52847 -83.04683 0 curveto closepath fill
+ 0 0 0 setrgbcolor 0 1.4944 dtransform truncate idtransform setlinewidth pop
+newpath -83.04683 0 moveto
+-83.04683 0.52847 -83.25679 1.03523 -83.63045 1.4089 curveto
+-84.00412 1.78256 -84.51088 1.99252 -85.03935 1.99252 curveto
+-85.56783 1.99252 -86.07458 1.78256 -86.44826 1.4089 curveto
+-86.82191 1.03523 -87.03188 0.52847 -87.03188 0 curveto
+-87.03188 -0.52847 -86.82191 -1.03523 -86.44826 -1.4089 curveto
+-86.07458 -1.78256 -85.56783 -1.99252 -85.03935 -1.99252 curveto
+-84.51088 -1.99252 -84.00412 -1.78256 -83.63045 -1.4089 curveto
+-83.25679 -1.03523 -83.04683 -0.52847 -83.04683 0 curveto closepath stroke
+ 1 1 1 setrgbcolor
+newpath -71.65392 29.76364 moveto
+-71.65392 30.29211 -71.86388 30.79887 -72.23753 31.17255 curveto
+-72.6112 31.5462 -73.11797 31.75616 -73.64644 31.75616 curveto
+-74.17491 31.75616 -74.68167 31.5462 -75.05534 31.17255 curveto
+-75.429 30.79887 -75.63896 30.29211 -75.63896 29.76364 curveto
+-75.63896 29.23517 -75.429 28.72841 -75.05534 28.35474 curveto
+-74.68167 27.98108 -74.17491 27.77112 -73.64644 27.77112 curveto
+-73.11797 27.77112 -72.6112 27.98108 -72.23753 28.35474 curveto
+-71.86388 28.72841 -71.65392 29.23517 -71.65392 29.76364 curveto closepath fill
+ 0 0 0 setrgbcolor
+newpath -71.65392 29.76364 moveto
+-71.65392 30.29211 -71.86388 30.79887 -72.23753 31.17255 curveto
+-72.6112 31.5462 -73.11797 31.75616 -73.64644 31.75616 curveto
+-74.17491 31.75616 -74.68167 31.5462 -75.05534 31.17255 curveto
+-75.429 30.79887 -75.63896 30.29211 -75.63896 29.76364 curveto
+-75.63896 29.23517 -75.429 28.72841 -75.05534 28.35474 curveto
+-74.68167 27.98108 -74.17491 27.77112 -73.64644 27.77112 curveto
+-73.11797 27.77112 -72.6112 27.98108 -72.23753 28.35474 curveto
+-71.86388 28.72841 -71.65392 29.23517 -71.65392 29.76364 curveto closepath
+ stroke
+ 1 1 1 setrgbcolor
+newpath -40.52716 54.3871 moveto
+-40.52716 54.91557 -40.73712 55.42233 -41.11078 55.796 curveto
+-41.48445 56.16966 -41.99121 56.37962 -42.51968 56.37962 curveto
+-43.04816 56.37962 -43.55492 56.16966 -43.92859 55.796 curveto
+-44.30225 55.42233 -44.5122 54.91557 -44.5122 54.3871 curveto
+-44.5122 53.85863 -44.30225 53.35187 -43.92859 52.9782 curveto
+-43.55492 52.60454 -43.04816 52.39458 -42.51968 52.39458 curveto
+-41.99121 52.39458 -41.48445 52.60454 -41.11078 52.9782 curveto
+-40.73712 53.35187 -40.52716 53.85863 -40.52716 54.3871 curveto closepath fill
+ 0 0 0 setrgbcolor
+newpath -40.52716 54.3871 moveto
+-40.52716 54.91557 -40.73712 55.42233 -41.11078 55.796 curveto
+-41.48445 56.16966 -41.99121 56.37962 -42.51968 56.37962 curveto
+-43.04816 56.37962 -43.55492 56.16966 -43.92859 55.796 curveto
+-44.30225 55.42233 -44.5122 54.91557 -44.5122 54.3871 curveto
+-44.5122 53.85863 -44.30225 53.35187 -43.92859 52.9782 curveto
+-43.55492 52.60454 -43.04816 52.39458 -42.51968 52.39458 curveto
+-41.99121 52.39458 -41.48445 52.60454 -41.11078 52.9782 curveto
+-40.73712 53.35187 -40.52716 53.85863 -40.52716 54.3871 curveto closepath
+ stroke
+ 1 1 1 setrgbcolor
+newpath 1.99252 59.52728 moveto
+1.99252 60.05576 1.78256 60.56252 1.4089 60.93619 curveto
+1.03523 61.30984 0.52847 61.5198 0 61.5198 curveto
+-0.52847 61.5198 -1.03523 61.30984 -1.4089 60.93619 curveto
+-1.78256 60.56252 -1.99252 60.05576 -1.99252 59.52728 curveto
+-1.99252 58.99881 -1.78256 58.49205 -1.4089 58.11838 curveto
+-1.03523 57.74472 -0.52847 57.53476 0 57.53476 curveto
+0.52847 57.53476 1.03523 57.74472 1.4089 58.11838 curveto
+1.78256 58.49205 1.99252 58.99881 1.99252 59.52728 curveto closepath fill
+ 0 0 0 setrgbcolor
+newpath 1.99252 59.52728 moveto
+1.99252 60.05576 1.78256 60.56252 1.4089 60.93619 curveto
+1.03523 61.30984 0.52847 61.5198 0 61.5198 curveto
+-0.52847 61.5198 -1.03523 61.30984 -1.4089 60.93619 curveto
+-1.78256 60.56252 -1.99252 60.05576 -1.99252 59.52728 curveto
+-1.99252 58.99881 -1.78256 58.49205 -1.4089 58.11838 curveto
+-1.03523 57.74472 -0.52847 57.53476 0 57.53476 curveto
+0.52847 57.53476 1.03523 57.74472 1.4089 58.11838 curveto
+1.78256 58.49205 1.99252 58.99881 1.99252 59.52728 curveto closepath stroke
+showpage
+%%EOF
--- /dev/null
+%!PS
+%%BoundingBox: -125 -42 59 41
+%%HiResBoundingBox: -124.99023 -41.30498 58.47002 40.5129
+%%Creator: MetaPost 0.993
+%%CreationDate: 2009.11.17:1821
+%%Pages: 1
+%*Font: cmmi10 9.96265 9.96265 51:8
+%*Font: cmmi7 6.97385 6.97385 69:8
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor
+44.50406 -31.46942 moveto
+(Q) cmmi10 9.96265 fshow
+52.38007 -32.96382 moveto
+(i) cmmi7 6.97385 fshow
+ 0 3.98505 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath 56.4775 3.45886 moveto 0 0 rlineto stroke
+newpath 31.34996 33.06506 moveto 0 0 rlineto stroke
+newpath -17.38435 37.77316 moveto 0 0 rlineto stroke
+newpath -53.02762 14.0371 moveto 0 0 rlineto stroke
+newpath -48.74036 -20.26933 moveto 0 0 rlineto stroke
+newpath -7.75012 -39.31245 moveto 0 0 rlineto stroke
+newpath 39.07585 -28.75238 moveto 0 0 rlineto stroke
+ 0 0.59776 dtransform truncate idtransform setlinewidth pop
+newpath 56.4775 3.45886 moveto
+31.34996 33.06506 lineto
+-17.38435 37.77316 lineto
+-53.02762 14.0371 lineto
+-48.74036 -20.26933 lineto
+-7.75012 -39.31245 lineto
+39.07585 -28.75238 lineto
+ closepath stroke
+ 0 1.4944 dtransform truncate idtransform setlinewidth pop
+ [3 3 ] 0 setdash
+newpath -113.3858 -8.50403 moveto
+-17.38435 37.77316 lineto stroke
+ [] 0 setdash
+newpath -113.3858 -8.50403 moveto
+-124.24303 -17.61447 lineto stroke
+ 1 1 1 setrgbcolor
+newpath -15.39183 37.77316 moveto
+-15.39183 38.30164 -15.60179 38.8084 -15.97545 39.18207 curveto
+-16.34912 39.55573 -16.85588 39.76569 -17.38435 39.76569 curveto
+-17.91283 39.76569 -18.41959 39.55573 -18.79326 39.18207 curveto
+-19.16692 38.8084 -19.37688 38.30164 -19.37688 37.77316 curveto
+-19.37688 37.24469 -19.16692 36.73793 -18.79326 36.36426 curveto
+-18.41959 35.9906 -17.91283 35.78064 -17.38435 35.78064 curveto
+-16.85588 35.78064 -16.34912 35.9906 -15.97545 36.36426 curveto
+-15.60179 36.73793 -15.39183 37.24469 -15.39183 37.77316 curveto closepath fill
+ 0 0 0 setrgbcolor
+newpath -15.39183 37.77316 moveto
+-15.39183 38.30164 -15.60179 38.8084 -15.97545 39.18207 curveto
+-16.34912 39.55573 -16.85588 39.76569 -17.38435 39.76569 curveto
+-17.91283 39.76569 -18.41959 39.55573 -18.79326 39.18207 curveto
+-19.16692 38.8084 -19.37688 38.30164 -19.37688 37.77316 curveto
+-19.37688 37.24469 -19.16692 36.73793 -18.79326 36.36426 curveto
+-18.41959 35.9906 -17.91283 35.78064 -17.38435 35.78064 curveto
+-16.85588 35.78064 -16.34912 35.9906 -15.97545 36.36426 curveto
+-15.60179 36.73793 -15.39183 37.24469 -15.39183 37.77316 curveto closepath
+ stroke
+ 1 1 1 setrgbcolor
+newpath -111.39328 -8.50403 moveto
+-111.39328 -7.97556 -111.60324 -7.4688 -111.9769 -7.09512 curveto
+-112.35057 -6.72147 -112.85733 -6.5115 -113.3858 -6.5115 curveto
+-113.91428 -6.5115 -114.42104 -6.72147 -114.79471 -7.09512 curveto
+-115.16837 -7.4688 -115.37833 -7.97556 -115.37833 -8.50403 curveto
+-115.37833 -9.0325 -115.16837 -9.53926 -114.79471 -9.91293 curveto
+-114.42104 -10.28659 -113.91428 -10.49655 -113.3858 -10.49655 curveto
+-112.85733 -10.49655 -112.35057 -10.28659 -111.9769 -9.91293 curveto
+-111.60324 -9.53926 -111.39328 -9.0325 -111.39328 -8.50403 curveto closepath
+ fill
+ 0 0 0 setrgbcolor
+newpath -111.39328 -8.50403 moveto
+-111.39328 -7.97556 -111.60324 -7.4688 -111.9769 -7.09512 curveto
+-112.35057 -6.72147 -112.85733 -6.5115 -113.3858 -6.5115 curveto
+-113.91428 -6.5115 -114.42104 -6.72147 -114.79471 -7.09512 curveto
+-115.16837 -7.4688 -115.37833 -7.97556 -115.37833 -8.50403 curveto
+-115.37833 -9.0325 -115.16837 -9.53926 -114.79471 -9.91293 curveto
+-114.42104 -10.28659 -113.91428 -10.49655 -113.3858 -10.49655 curveto
+-112.85733 -10.49655 -112.35057 -10.28659 -111.9769 -9.91293 curveto
+-111.60324 -9.53926 -111.39328 -9.0325 -111.39328 -8.50403 curveto closepath
+ stroke
+ 0 0.59776 dtransform truncate idtransform setlinewidth pop
+newpath -13.54805 17.42911 moveto
+-17.04922 16.0954 -20.14311 14.247 -22.5961 11.9799 curveto
+-27.13503 7.78497 -29.10814 2.49986 -28.08002 -2.71344 curveto
+-27.0519 -7.92674 -23.10701 -12.63998 -17.11423 -15.8172 curveto
+-11.12143 -18.99443 -3.57126 -20.37561 3.87636 -19.65593 curveto
+11.32397 -18.93625 18.05719 -16.17484 22.5961 -11.9799 curveto
+27.13503 -7.78497 29.10814 -2.49986 28.08002 2.71344 curveto
+27.0519 7.92674 23.10701 12.63998 17.11423 15.8172 curveto
+11.12143 18.99443 3.57126 20.37561 -3.87636 19.65593 curveto stroke
+newpath -0.25618 21.35713 moveto
+-1.48535 20.85222 -2.69522 20.28448 -3.87636 19.65593 curveto
+-2.59671 19.26517 -1.33978 18.81108 -0.1136 18.29893 curveto
+ closepath
+gsave fill grestore stroke
+newpath -16.2811 14.50847 moveto
+-15.45143 15.5185 -14.53754 16.49489 -13.54805 17.42911 curveto
+-14.90833 17.46822 -16.24495 17.42404 -17.5458 17.29652 curveto
+ closepath
+gsave fill grestore stroke
+showpage
+%%EOF