Note: this example session was done with a previous version of the package, and under mathematica 1.2. It should be checked for accuracy and updated. For example, I think the shortcut illustrated in In[5] below is not be supported anymore, and the line In[26]:= Line[{p1,p2,p3,p1}] /. Render[PoincareBall] is certainly obsolete -- in the current version you would say SetOptions[Convert,Model->PoincareBall] at the beginning, and then and Line[{p1,p2,p3,p1}] will convert itself into arcs of circle at rendering time. Also some capabilities (such as 3-D line plotting) are not illustrated here. carrot:; math <> 2 3 (1 - 4 a ) Out[19]//Short= ArcCos[----------------------------------------------------] 2 4 -3 a -16 a Sqrt[----------- + <<2>>] Sqrt[------------ + <<2>>] 2 3 3 (1 - 4 a ) (1 + <<1>>) In[20]:= Cos[%] // Simplify Sqrt[3] Out[20]= -------------- 2 2 Sqrt[1 - a ] In[21]:= Solve[N[%==Cos[Pi/7]],a] Out[21]= {{a -> 0.275798}, {a -> -0.275798}} In[23]:= p1 = Projective[N[p /. %21[[1]]]] Out[23]= Projective[{0.275798, 0.477696}] In[24]:= p2= Projective[{%[[1,1]],0}] Out[24]= Projective[{0.275798, 0}] In[25]:= p3=Projective[{0,0}] Out[25]= Projective[{0, 0}] In[26]:= Line[{p1,p2,p3,p1}] /. Render[PoincareBall] (* we get two straight lines and an arc of circle; the result can be passed to Graphics *) -16 Out[26]= {Circle[{3.62585, 3.15217 10 }, 3.48522, {3.06679, 3.14159}], > Line[{{0.140626, 0.}, {0., 0.}}], Line[{{0., 0.}, {0.150371, 0.260451}}]} In[27]:= Show[Graphics[%],AspectRatio->Automatic] # ## # # # # # # ## # # # # # # # # # # # # # # # # # ## # # # # # # # # # # # # # # # # # # # ## # # # # # # # # # ############################### Out[27]= -Graphics- In[28]:= Distance[p1,p2] Out[28]= 0.545275 In[29]:= {q1,q2,q3} = Convert[#,PoincareBall]& /@ {p1,p2,p3} Out[29]= {PoincareBall[{0.150371, 0.260451}], PoincareBall[{0.140626, 0}], > PoincareBall[{0, 0}]} In[30]:= Distance[q1,q2] Out[30]= 0.545275 (* better be the same... *) In[31]:= CompleteFrame[PoincareBall[Vector[{0,0},{1,0}]]] (* 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 *) Out[31]= Minkowski[Frame[{{0, -1, 0}, {1, 0, 0}, {0, 0, 1}}]] In[32]:= CompleteFrame[PoincareBall[Vector[{0,0},{1,0}]],-1] Out[32]= Minkowski[Frame[{{0, 1, 0}, {1, 0, 0}, {0, 0, 1}}]] In[33]:= r23=Isometry[%%,%] Out[33]= Isometry[{{1, 0, 0}, {0, -1, 0}, {0, 0, 1}}] In[34]:= %.PoincareBall[{.3,.4}] Out[34]= PoincareBall[{0.3, -0.4}] In[35]:= CompleteFrame[PoincareBall[Vector[Peel[q2],{0,1}]]] (* Peel[q2] peels off the label, PoincareBall. First would also work *) Out[35]= Minkowski[Frame[{{1.04035, -1.62076 10 , 0.286926}, {0, 1., 0}, > {0.286926, 0, 1.04035}}]] In[36]:= CompleteFrame[PoincareBall[Vector[Peel[q2],{0,1}]],-1] -17 Out[36]= Minkowski[Frame[{{-1.04035, 1.62076 10 , -0.286926}, {0, 1., 0}, > {0.286926, 0, 1.04035}}]] In[37]:= r12=Isometry[%%,%] //Chop Out[37]= Isometry[{{-1.16465, 0, 0.597007}, {0, 1., 0}, > {-0.597007, 0, 1.16465}}] In[38]:= Inverse[%] (* we expect the same, since this is a reflection *) Out[38]= Isometry[{{-1.16465, 0, 0.597007}, {0, 1., 0}, > {-0.597007, 0, 1.16465}}] In[39]:= %.PoincareBall[{0,0}] Out[39]= PoincareBall[{0.275798, 0}] In[40]:= {Distance[q2,q3],Distance[q2,%]} Out[40]= {0.283128, 0.283128} (* reflection preserves distances *) In[41]:= CompleteFrame[PoincareBall[Vector[Peel[q1],-Peel[q1]]]] -17 Out[41]= Minkowski[Frame[{{-0.866025, 0.5, 9.59344 10 }, > {-0.59944, -1.03826, -0.661297}, {0.330648, 0.5727, 1.19888}}]] In[42]:= CompleteFrame[PoincareBall[Vector[Peel[q1],-Peel[q1]]],-1] -17 Out[42]= Minkowski[Frame[{{0.866025, -0.5, -9.59344 10 }, > {-0.59944, -1.03826, -0.661297}, {0.330648, 0.5727, 1.19888}}]] In[43]:= r13=Isometry[%%,%] // Chop Out[43]= Isometry[{{-0.5, 0.866025, 0}, {0.866025, 0.5, 0}, {0, 0, 1.}}] In[45]:= r13.r23.r13.r23.r13.r23 // Chop Out[45]= Isometry[{{1., 0, 0}, {0, 1., 0}, {0, 0, 1.}}] In[46]:= r23.r12.r23.r12 // Chop Out[46]= Isometry[{{1., 0, 0}, {0, 1., 0}, {0, 0, 1.}}] In[47]:= r12.r13.r12.r13.r12.r13.r12.r13.r12.r13.r12.r13.r12.r13 // Chop Out[48]= Isometry[{{1., 0, 0}, {0, 1., 0}, {0, 0, 1.}}] In[50]:= Drag[PoincareBall[Vector[Peel[q2],{0,1}]],100] //N (* 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 *) Out[50]= PoincareBall[Vector[{0.275798, 0.961216}, -16 -43 > {1.02577 10 , 1.40258 10 }]] In[51]:= Distance[q2,First /@ %] (* this should be 100, but because of roundoff the point *) (* defined in Out[50] is actually slightly outside the ball, *) (* with unpredictable consequences *) Out[51]= 0.27942 I