(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 3.0, MathReader 3.0, or any compatible application. The data for the notebook starts with the line of stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 27911, 848]*) (*NotebookOutlinePosition[ 28966, 884]*) (* CellTagsIndexPosition[ 28922, 880]*) (*WindowFrame->Normal*) Notebook[{ Cell[TextData["<True], Cell[CellGroupData[{Cell[TextData["Conversions between the various models"], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Convert[PoincareBall[{.3,.4}],Projective]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Projective[{0.48, 0.6400000000000002}]\ \>", "\<\ Projective[{0.48, 0.64}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Convert[%,PoincareBall]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ PoincareBall[{0.3, 0.4000000000000001}]\ \>", "\<\ PoincareBall[{0.3, 0.4}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Convert[PoincareBall[{.3,.4}],Minkowski]"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ Minkowski[{0.8, 1.066666666666667, 1.666666666666666}]\ \>", "\<\ Minkowski[{0.8, 1.06667, 1.66667}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Convert[Minkowski[{1,2,3}],PoincareBall]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ PoincareBall[{1/4, 1/2}]\ \>", "\<\ 1 1 PoincareBall[{-, -}] 4 2\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "This is garbage, because {1,2,3} was not normalized.\nMinkowski points \ generated by Convert are automatically normalized unless they're at infinity. \ We need instead the following invocation:"], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Convert[Normalize[Minkowski[{1,2,3}]],PoincareBall]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ PoincareBall[{1/5, 2/5}]\ \>", "\<\ 1 2 PoincareBall[{-, -}] 5 5\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Convert[%,Minkowski]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Minkowski[{1/2, 1, 3/2}]\ \>", "\<\ 1 3 Minkowski[{-, 1, -}] 2 2\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "We can also map tangent vectors between the various models."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["v1=PoincareBall[Vector[{0,0},{0,1}]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ PoincareBall[Vector[{0, 0}, {0, 1}]]\ \>", "\<\ PoincareBall[Vector[{0, 0}, {0, 1}]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["v2=Convert[v1,Projective]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Projective[Vector[{0, 0}, {0, 2}]]\ \>", "\<\ Projective[Vector[{0, 0}, {0, 2}]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["VectorLength /@ {v1,v2}"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {2, 2}\ \>", "\<\ {2, 2}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData["Finding the (2,3,7) triangle"], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "We'll solve the (2,3,7) triangle. Let the Pi/3 angle be at the origin, and \ the short edge along the x-axis. In the projective mode, the right angle \ will be at {a,0} and the Pi/7\nangle will be at {a,a Sqrt[3]}."], "Text", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times"], Cell[CellGroupData[{Cell[TextData["p={a,a Sqrt[3]}"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {a, 3^(1/2)*a}\ \>", "\<\ {a, Sqrt[3] a}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Angle[Projective[Vector[p,{0,-1}]],Projective[Vector[p,-p]]] //\n Short"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Short[ArcCos[((-4*3^(1/2)*a^3)/(1 - 4*a^2)^3 - (3^(1/2)*a^2*(-a - (4*a^3)/(1 - 4*a^2)))/ (1 - 4*a^2)^2 + ((-1 - (3*a^2)/(1 - 4*a^2))* (-(3^(1/2)*a) - (4*3^(1/2)*a^3)/(1 - 4*a^2)))/ (1 - 4*a^2))/ (((-3*a^2)/(1 - 4*a^2)^3 + (3*a^4)/(1 - 4*a^2)^3 + (-1 - (3*a^2)/(1 - 4*a^2))^2/(1 - 4*a^2))* ((-16*a^4)/(1 - 4*a^2)^3 + (-a - (4*a^3)/(1 - 4*a^2))^2/(1 - 4*a^2) + (-(3^(1/2)*a) - (4*3^(1/2)*a^3)/(1 - 4*a^2))^2/ (1 - 4*a^2)))^(1/2)]]\ \>", "\<\ 3 -4 Sqrt[3] a ------------- + <<2>> 2 3 (1 - 4 a ) ArcCos[---------------------------------] 2 -3 a Sqrt[(----------- + <<2>>) <<1>>] 2 3 (1 - 4 a )\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Cos[%] // Simplify"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ (3^(1/2)*a)/ (2*((a^2*(1 - a^2))/(-1 + 4*a^2)^4)^(1/2)* (-1 + 4*a^2)^2)\ \>", "\<\ Sqrt[3] a --------------------------------- 2 2 a (1 - a ) 2 2 2 Sqrt[------------] (-1 + 4 a ) 2 4 (-1 + 4 a )\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["sols = Solve[N[%==Cos[Pi/7]],a]"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ {{a -> 0.2757977789799765}, {a -> -0.2757977789799765}}\ \>", "\<\ {{a -> 0.275798}, {a -> -0.275798}}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["p1 = Projective[N[p /. %[[1]]]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ Projective[{0.2757977789799765, 0.4776957658079711}]\ \>", "\<\ Projective[{0.275798, 0.477696}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["p2= Projective[{%[[1,1]],0}]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Projective[{0.2757977789799765, 0}]\ \>", "\<\ Projective[{0.275798, 0}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["p3=Projective[{0,0}]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Projective[{0, 0}]\ \>", "\<\ Projective[{0, 0}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData["SetOptions[Convert, Model -> PoincareBall];"], "Input", AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "Show[Graphics[{\n UnitCircle,\n Line[{p1,p2,p3,p1}]\n },\n \ AspectRatio -> Automatic]]"], "Input", AspectRatioFixed->True], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.5 0.47619 0.5 0.47619 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: Graphics [ ] 0 setdash 0 setgray gsave grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath gsave 0.004 setlinewidth newpath 0.5 0.5 0.47619 0 365.73 arc stroke gsave 0.57161 0.62402 moveto 0.56696 0.5 lineto stroke 0.56696 0.5 moveto 0.5 0.5 lineto stroke 0.5 0.5 moveto 0.57161 0.62402 lineto stroke grestore grestore % End of Graphics MathPictureEnd\ \>"], "Graphics", Evaluatable->False, AspectRatioFixed->True, ImageSize->{282, 282}, ImageMargins->{{34, Inherited}, {Inherited, Inherited}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHggYjN[Vi^OShn03ooeGooj[oooclo5H/1EGooj[ooc/k>gYjN[Vi^OShn03o oclo?ginO[fm_Oclo5D00:X00?l00000EED0EJX00=d81Slo?ginO[fm_Oclo0<30d92@X61PL30`000 EED0EJX0EOl0E@00ZUD0ZZX0E@<30d92@X61PL30`000E@L71dI6AXF5QLC4a000ZUD0ZZX0Z_l0ZP00 e5D0ojX0ZPL71dI6AXF5QLC4a000ZP/;2dY:BXV9RLS8b000oeD0ojX0ool0o`1E05EE0:X0o`/;2dY: BXV9RLS8b000o`l?3di>CXf=SLcCXf=SLc00;oN@03odh0001;00?oOP02od`0001:0003o`00084000?o0000 B@0004P00_n500;oB@0004L000?o0000Q`000ol000160000A@02oh/00_m60000A0000ol0002=0003 o`0004<0001200;oT@02od<0001000;oU@02od40000o0003o`0009L000?o0000?P0003d00_nK00;o ?P0003`000?o0000W@000ol0000k0000>`000ol0002O0003o`0003X0000j0003o`000:4000?o0000 >@0003P00_nU0003o`0003P0000g0003o`000:H000?o0000=`0003H000?o0000Z0000ol0000f0000 =@000ol0002Z00;o=P0003@000?o0000[@000ol0000c0000<`000ol0002_0003o`000380000b0003 o`000;4000?o0000<@00034000?o0000/`000ol0000`0000<0000ol0002e0003o`0002l0000_0003 o`000;L000?o0000;P0002h000?o0000^@000ol0000]0000;@000ol0002k0003o`0002`0000/0003 o`000;d000?o0000:`0002/000?o0000_`000ol0000Z0000:P000ol000310003o`0002T0000Y0003 o`000<<000?o0000:00002P000?o0000a@000ol0000W0000:0000ol000360003o`0002H0000W0003 o`0004000?o00006@0001T000?o0000h`000ol0000H000060000ol0003U0003o`0001L0000H0003 o`000>D000?o00005`0001L000?o0000i`000ol0000F00005P000ol0003Y0003o`0001D0000F0003 o`000>T000?o00005@0001D000?o0000j`000ol0000D00005@000ol0003[0003o`0001@0000E0003 o`000>/000?o0000500001@000?o0000k@000ol0000C00004`000ol0003_0003o`000180000C0003 o`000>l000?o00004P0001<000?o0000l0000ol0000A00004P000ol0003a0003o`000140000A0003 o`000?8000?o00004@00014000?o0000l`000ol0000@00004@000ol0003c0003o`000100000A0003 o`000?<000?o00004000010000?o0000m@000ol0000?00003`000ol0003g0003o`0000h0000?0003 o`000?L000?o00003P0000l000?o0000m`000ol0000>00003P000ol0003i0003o`0000d0000>0003 o`000?T000?o00003@0000h000?o0000n@000ol0000=00003@000ol0003k0003o`0000`0000=0003 o`000?/000?o0000300000d000?o0000n`000ol0000<00003@000ol0003k0003o`0000`0000<0003 o`000?d000?o00002`0000`000?o0000o@000ol0000;000030000ol0003m0003o`0000/0000;0003 o`000?l000?o00002P0000/000?o0000o`000ol0000:00002`000ol0003o0003o`0000X0000:0003 o`000?l00P000ol0000900002P000ol0003o008000?o00002@0000X000?o0000o`020003o`0000T0 000:0003o`000?l00P000ol0000900002P000ol0003o008000?o00002@0000T000?o0000o`040003 o`0000P000090003o`000?l010000ol0000800002@000ol0003o00@000?o0000200000T000?o0000 o`040003o`0000P000090003o`000?l010000ol00008000020000ol0003o00H000?o00001`0000P0 00?o0000o`060003o`0000L000080003o`000?l01P000ol00007000020000ol0003o00H000?o0000 1`0000P000?o0000o`060003o`0000L000070003o`000?l020000ol0000600001`000ol0003o00P0 00?o00001P0000L000?o0000o`080003o`0000H000070003o`000?l020000ol0000600001`000ol0 003o00P000?o00001P0000L000?o0000o`080003o`0000H000070003o`000?l020000ol000060000 1`000ol0003o00P000?o00001P0000L000?o0000o`080003o`0000H000070003o`000?l020000ol0 000600001P000ol0003o00X000?o00001@0000H000?o0000o`0:0003o`0000D000060003o`000?l0 2P000ol0000500001P000ol0003o00X000?o00001@0000H000?o0000o`0:0003o`0000D000060003 o`000?l02P000ol0000500001P000ol0003o00X000?o00001@0000H000?o0000o`0:0003o`0000D0 00060003o`0008<05?mb0003o`0000D000060003o`0008<000?o000040000ol0001`0003o`0000D0 00060003o`0008@000?o00003`000ol0001`0003o`0000D000060003o`0008@000?o00003`000ol0 001`0003o`0000D000060003o`0008D000?o00003P000ol0001`0003o`0000D000060003o`0008H0 00?o00003@000ol0001`0003o`0000D000060003o`0008H000?o00003@000ol0001`0003o`0000D0 00060003o`0008L000?o000030000ol0001`0003o`0000D000060003o`0008L000?o000030000ol0 001`0003o`0000D000060003o`0008P000?o00002`000ol0001`0003o`0000D000070003o`0008L0 00?o00002`000ol0001_0003o`0000H000070003o`0008P000?o00002P000ol0001_0003o`0000H0 00070003o`0008T000?o00002@000ol0001_0003o`0000H000070003o`0008T000?o00002@000ol0 001_0003o`0000H000070003o`0008X000?o000020000ol0001_0003o`0000H000070003o`0008X0 00?o000020000ol0001_0003o`0000H000070003o`0008/000?o00001`000ol0001_0003o`0000H0 00070003o`0008/000?o00001`000ol0001_0003o`0000H000070003o`0008`000?o00001`000ol0 001^0003o`0000H000070003o`0008d000?o00001P000ol0001^0003o`0000H000080003o`0008`0 00?o00001P000ol0001]0003o`0000L000080003o`0008d000?o00001@000ol0001]0003o`0000L0 00080003o`0008d000?o00001@000ol0001]0003o`0000L000080003o`0008h000?o000010000ol0 001]0003o`0000L000080003o`0008h000?o000010000ol0001]0003o`0000L000090003o`0008h0 00?o00000`000ol0001/0003o`0000P000090003o`0008l000?o00000P000ol0001/0003o`0000P0 00090003o`0008l000?o00000P000ol0001/0003o`0000P000090003o`00090000Go0000o`1^0003 o`0000P000090003o`00090000Go0000o`1^0003o`0000P0000:0003o`00090000Co003oK@000ol0 000900002P000ol0002@0004o`00ofd000?o00002@0000X000?o0000T@000ol0o`1]0003o`0000T0 000:0003o`0009800_m]0003o`0000T0000:0003o`0009800_m]0003o`0000T0000;0003o`000980 00?o0000JP000ol0000:00002`000ol0003o0003o`0000X0000;0003o`000?l000?o00002P0000`0 00?o0000o@000ol0000;000030000ol0003m0003o`0000/0000<0003o`000?d000?o00002`0000d0 00?o0000n`000ol0000<00003@000ol0003k0003o`0000`0000=0003o`000?/000?o0000300000h0 00?o0000n@000ol0000=00003P000ol0003i0003o`0000d0000>0003o`000?T000?o00003@0000l0 00?o0000m`000ol0000>00003`000ol0003g0003o`0000h0000?0003o`000?L000?o00003P000100 00?o0000m@000ol0000?000040000ol0003e0003o`0000l0000A0003o`000?<000?o000040000140 00?o0000l`000ol0000@00004@000ol0003c0003o`000100000B0003o`000?4000?o00004@000180 00?o0000l@000ol0000A00004`000ol0003_0003o`000180000C0003o`000>l000?o00004P0001<0 00?o0000k`000ol0000B000050000ol0003]0003o`0001<0000E0003o`000>/000?o0000500001D0 00?o0000j`000ol0000D00005P000ol0003Y0003o`0001D0000F0003o`000>T000?o00005@0001H0 00?o0000j@000ol0000E00005`000ol0003W0003o`0001H0000H0003o`000>D000?o00005`0001P0 00?o0000i@000ol0000G00006@000ol0003S0003o`0001P0000J0003o`000>4000?o00006@0001X0 00?o0000h@000ol0000I00006`000ol0003O0003o`0001X0000L0003o`000=d000?o00006`0001`0 00?o0000g@000ol0000K00007@000ol0003K0003o`0001`0000M0003o`000=/000?o0000700001h0 00?o0000f@000ol0000M00007`000ol0003G0003o`0001h0000O0003o`000=L000?o00007P000200 00?o0000e@000ol0000O00008@000ol0003C0003o`000200000R0003o`000=4000?o00008@0002<0 00?o0000c`000ol0000R00008`000ol0003?0003o`000280000T0003o`000P000ol0002Q0003o`0003T0000k00;oW`02oc`0 000m0003o`0009/000?o0000?00003h00_nI00;o?`00040000?o0000U@000ol0000o0000@@02oi<0 0_m20000@`02ohl00_m40000A@000ol0002;0003o`0004@0001600;oR@02odL000180003o`0008D0 00?o0000A`0004T00_n300;oBP0004/000?o0000O`000ol0001:0000C003og`00_m=0000C`02ogL0 0om?0000D@000ol0001c0003o`000500001B00?oL002oe<0001E0003o`0006/00_mE0000EP04ofD0 1?mG0000FP000ol0001Q0003o`0005T0001K00?oG@03oe`0001N00?oE`03oel0001Q00CoC`04of80 001U00?oB@03ofH0001X00?o@`03ofT0001[00Go>@05of`0001`00Go;`05og40001e00Go9@05ogH0 001j00[o4@0:og/00024017oQ@000?l06`000?l06`000?l06`000?l06`000?l06`000?l06`000001 \ \>"], ImageRangeCache->{{{0, 281}, {281, 0}} -> {-1.05001, -1.05001, 0.00747339, 0.00747339}}], Cell[OutputFormData[ "\<\ The Unformatted text for this cell was not generated. Use options in the Actions Preferences dialog box to control when Unformatted text is generated.\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Distance[p1,p2]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ 0.5452748317535451\ \>", "\<\ 0.545275\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["{q1,q2,q3} = Convert[#,PoincareBall]& /@ {p1,p2,p3}"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ {PoincareBall[{0.1503713093731898, 0.2604507478350228}], PoincareBall[{0.1406259299643202, 0}], PoincareBall[{0, 0}]}\ \>", "\<\ {PoincareBall[{0.150371, 0.260451}], PoincareBall[{0.140626, 0}], PoincareBall[{0, 0}]}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Distance[q1,q2]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ 0.5452748317535457\ \>", "\<\ 0.545275\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "We'll build up the reflection in each of the three sides. The reflection in \ side p2-p3 takes a positive frame including Vector[{0,0},{1,0}] to a negative \ frame including the same vector."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["CompleteFrame[PoincareBall[Vector[{0,0},{1,0}]]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ Minkowski[Frame[{{0, -1, 0}, {1, 0, 0}, {0, 0, 1}}]]\ \>", "\<\ Minkowski[Frame[{{0, -1, 0}, {1, 0, 0}, {0, 0, 1}}]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["CompleteFrame[PoincareBall[Vector[{0,0},{1,0}]],-1]"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ Minkowski[Frame[{{0, 1, 0}, {1, 0, 0}, {0, 0, 1}}]]\ \>", "\<\ Minkowski[Frame[{{0, 1, 0}, {1, 0, 0}, {0, 0, 1}}]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["r23=Isometry[%%,%]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Isometry[{{1, 0, 0}, {0, -1, 0}, {0, 0, 1}}]\ \>", "\<\ Isometry[{{1, 0, 0}, {0, -1, 0}, {0, 0, 1}}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["%.PoincareBall[{.3,.4}]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ PoincareBall[{0.3, -0.4000000000000002}]\ \>", "\<\ PoincareBall[{0.3, -0.4}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["CompleteFrame[PoincareBall[Vector[Peel[q2],{0,1}]]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Minkowski[Frame[{{1.040349236829868, 0., 0.2869260088811912}, {0, 1., 0}, {0.2869260088811913, 0, 1.040349236829868}}]]\ \>", "\<\ Minkowski[Frame[{{1.04035, 0., 0.286926}, {0, 1., 0}, {0.286926, 0, 1.04035}}]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "Peel[q2] peels off the label, PoincareBall. First would also work."], "Text",\ Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "CompleteFrame[PoincareBall[Vector[Peel[q2],{0,1}]],-1]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Minkowski[Frame[{{-1.040349236829868, 0., -0.2869260088811912}, {0, 1., 0}, {0.2869260088811913, 0, 1.040349236829868}}]]\ \>", "\<\ Minkowski[Frame[{{-1.04035, 0., -0.286926}, {0, 1., 0}, {0.286926, 0, 1.04035}}]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["r12=Isometry[%%,%] //Chop"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ Isometry[{{-1.164653069144979, 0, 0.5970065087323749}, {0, 1., 0}, {-0.5970065087323749, 0, 1.164653069144979}}]\ \>", "\<\ Isometry[{{-1.16465, 0, 0.597007}, {0, 1., 0}, {-0.597007, 0, 1.16465}}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "Now find the inverse transformation. We expect the same, since this is a \ reflection."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Inverse[%]"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ Isometry[{{-1.164653069144979, 0, 0.5970065087323749}, {0, 1., 0}, {-0.5970065087323749, 0, 1.164653069144979}}]\ \>", "\<\ Isometry[{{-1.16465, 0, 0.597007}, {0, 1., 0}, {-0.597007, 0, 1.16465}}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["%.PoincareBall[{0,0}]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ PoincareBall[{0.2757977789799765, 0}]\ \>", "\<\ PoincareBall[{0.275798, 0}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["{Distance[q2,q3],Distance[q2,%]}"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {0.2831281533676582, 0.2831281533676588}\ \>", "\<\ {0.283128, 0.283128}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData["Reflection preserves distances."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "CompleteFrame[PoincareBall[Vector[Peel[q1],-Peel[q1]]]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Minkowski[Frame[{{-0.866025403784439, 0.5, -(2.775557561562892*10^-17)}, {-0.5994400936445289, -1.038260698286169, -0.6612969858348408}, {0.3306484929174204, 0.5726999891790501, 1.198880187289058}}]]\ \>", "\<\ -17 Minkowski[Frame[{{-0.866025, 0.5, -2.77556 10 }, {-0.59944, -1.03826, -0.661297}, {0.330648, 0.5727, 1.19888}}]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "CompleteFrame[PoincareBall[Vector[Peel[q1],-Peel[q1]]],-1]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Minkowski[Frame[{{0.866025403784439, -0.5, 2.775557561562892*10^-17}, {-0.5994400936445289, -1.038260698286169, -0.6612969858348408}, {0.3306484929174204, 0.5726999891790501, 1.198880187289058}}]]\ \>", "\<\ -17 Minkowski[Frame[{{0.866025, -0.5, 2.77556 10 }, {-0.59944, -1.03826, -0.661297}, {0.330648, 0.5727, 1.19888}}]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["r13=Isometry[%%,%] // Chop"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ Isometry[{{-0.5000000000000002, 0.866025403784439, 0}, {0.866025403784439, 0.5, 0}, {0, 0, 1.000000000000001}}]\ \>", "\<\ Isometry[{{-0.5, 0.866025, 0}, {0.866025, 0.5, 0}, {0, 0, 1.}}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["r13.r23.r13.r23.r13.r23 // Chop"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Isometry[{{1., 0, 0}, {0, 1., 0}, {0, 0, 1.000000000000002}}]\ \>", "\<\ Isometry[{{1., 0, 0}, {0, 1., 0}, {0, 0, 1.}}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["r23.r12.r23.r12 // Chop"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Isometry[{{1., 0, 0}, {0, 1., 0}, {0, 0, 1.}}]\ \>", "\<\ Isometry[{{1., 0, 0}, {0, 1., 0}, {0, 0, 1.}}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "r12.r13.r12.r13.r12.r13.r12.r13.r12.r13.r12.r13.r12.r13 // Chop"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Isometry[{{1., 0, 0}, {0, 0.999999999999999, 0}, {0, 0, 1.00000000000001}}]\ \>", "\<\ Isometry[{{1., 0, 0}, {0, 1., 0}, {0, 0, 1.}}]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData["Points near the circle at infinity"], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Find where the geodesic determined by this vector intersects the sphere by \ walking 100 units along it, we get pretty close to the boundary; in the \ future there may be a special function to do this right."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Drag[PoincareBall[Vector[Peel[q2],{0,1}]],100] //N"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ PoincareBall[Vector[{0.2757977789799765, 0.961215680848847}, {1.025774559859318*10^-16, 1.40258118713154*10^-43}]]\ \>", "\<\ PoincareBall[Vector[{0.275798, 0.961216}, -16 -43 {1.02577 10 , 1.40258 10 }]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Distance[q2,First /@ %]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ 0. + 0.2794195724391683*I\ \>", "\<\ 0. + 0.27942 I\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "This should be 100, but because of roundoff the point defined above is \ actually slightly outside the ball, with unpredictable consequences"], "Text",\ Evaluatable->False, AspectRatioFixed->True]}, Open]] }, FrontEndVersion->"Macintosh 3.0", ScreenRectangle->{{0, 640}, {0, 460}}, WindowToolbars->{}, CellGrouping->Manual, WindowSize->{520, 365}, WindowMargins->{{52, Automatic}, {Automatic, 31}}, PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}}, ShowCellLabel->True, ShowCellTags->False, RenderingOptions->{"ObjectDithering"->True, "RasterDithering"->False}, MacintoshSystemPageSetup->"\<\ AVU/IFiQKFD000000V8nh09RAj0000000OXQ<097PXP0AP1Y06`0I@1^0642HSkP 0V97`0000001nR4@0TN2R000000000000000009R?^0000000000000000000000 00000000000000000000000000000000\>" ] (*********************************************************************** Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. ***********************************************************************) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[1711, 51, 67, 1, 70, "Input"], Cell[CellGroupData[{ Cell[1801, 54, 118, 2, 70, "Subsection", Evaluatable->False], Cell[CellGroupData[{ Cell[1942, 58, 94, 1, 70, "Input"], Cell[2039, 61, 165, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[2236, 70, 76, 1, 70, "Input"], Cell[2315, 73, 166, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[2513, 82, 93, 1, 70, "Input"], Cell[2609, 85, 192, 8, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[2833, 95, 93, 1, 70, "Input"], Cell[2929, 98, 185, 9, 70, "Output", Evaluatable->False] }, Open ]], Cell[3126, 109, 269, 5, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[3418, 116, 104, 1, 70, "Input"], Cell[3525, 119, 185, 9, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[3742, 130, 73, 1, 70, "Input"], Cell[3818, 133, 185, 9, 70, "Output", Evaluatable->False] }, Open ]], Cell[4015, 144, 134, 3, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[4172, 149, 89, 1, 70, "Input"], Cell[4264, 152, 175, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[4471, 161, 78, 1, 70, "Input"], Cell[4552, 164, 171, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[4755, 173, 76, 1, 70, "Input"], Cell[4834, 176, 114, 6, 70, "Output", Evaluatable->False] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[4989, 184, 108, 2, 70, "Subsection", Evaluatable->False], Cell[5100, 188, 314, 6, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[5437, 196, 68, 1, 70, "Input"], Cell[5508, 199, 131, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[5671, 208, 129, 3, 70, "Input"], Cell[5803, 213, 931, 27, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[6766, 242, 71, 1, 70, "Input"], Cell[6840, 245, 358, 14, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[7230, 261, 84, 1, 70, "Input"], Cell[7317, 264, 194, 8, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[7543, 274, 84, 1, 70, "Input"], Cell[7630, 277, 188, 8, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[7850, 287, 81, 1, 70, "Input"], Cell[7934, 290, 163, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[8129, 299, 73, 1, 70, "Input"], Cell[8205, 302, 139, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[8356, 311, 96, 1, 70, "Input"], Cell[CellGroupData[{ Cell[8475, 314, 158, 3, 70, "Input"], Cell[8636, 319, 9707, 163, 290, 683, 46, "GraphicsData", "PostScript", "Graphics", Evaluatable->False], Cell[18346, 484, 265, 10, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[18643, 496, 68, 1, 70, "Input"], Cell[18714, 499, 129, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[18875, 508, 104, 1, 70, "Input"], Cell[18982, 511, 318, 11, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[19332, 524, 68, 1, 70, "Input"], Cell[19403, 527, 129, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[19544, 536, 265, 5, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[19832, 543, 101, 1, 70, "Input"], Cell[19936, 546, 208, 8, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[20176, 556, 104, 1, 70, "Input"], Cell[20283, 559, 206, 8, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[20521, 569, 71, 1, 70, "Input"], Cell[20595, 572, 191, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[20818, 581, 76, 1, 70, "Input"], Cell[20897, 584, 168, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[21097, 593, 104, 1, 70, "Input"], Cell[21204, 596, 319, 11, 70, "Output", Evaluatable->False] }, Open ]], Cell[21535, 609, 144, 4, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[21702, 615, 108, 2, 70, "Input"], Cell[21813, 619, 323, 11, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[22168, 632, 78, 1, 70, "Input"], Cell[22249, 635, 303, 12, 70, "Output", Evaluatable->False] }, Open ]], Cell[22564, 649, 161, 4, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[22748, 655, 63, 1, 70, "Input"], Cell[22814, 658, 303, 12, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[23149, 672, 74, 1, 70, "Input"], Cell[23226, 675, 167, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[23425, 684, 85, 1, 70, "Input"], Cell[23513, 687, 163, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[23688, 696, 105, 2, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[23816, 700, 109, 2, 70, "Input"], Cell[23928, 704, 507, 17, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[24467, 723, 112, 2, 70, "Input"], Cell[24582, 727, 502, 17, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[25116, 746, 79, 1, 70, "Input"], Cell[25198, 749, 292, 12, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[25522, 763, 84, 1, 70, "Input"], Cell[25609, 766, 214, 8, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[25855, 776, 76, 1, 70, "Input"], Cell[25934, 779, 195, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[26161, 788, 117, 2, 70, "Input"], Cell[26281, 792, 228, 8, 70, "Output", Evaluatable->False] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[26550, 802, 114, 2, 70, "Subsection", Evaluatable->False], Cell[26667, 806, 282, 5, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[26972, 813, 103, 1, 70, "Input"], Cell[27078, 816, 339, 12, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[27449, 830, 76, 1, 70, "Input"], Cell[27528, 833, 142, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[27682, 842, 217, 5, 70, "Text", Evaluatable->False] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)