Solution. First we define a procedure to check collinearity of two vectors
from init_cycle import *
def is_collinear(X, Y):
return bool((X[0]*Y[1]-X[1]*Y[0]).normal().is_zero() \
and (X[0]*Y[2]-X[2]*Y[0]).normal().is_zero())
It is handy to have precooked $\sqrt{2}$ ready.
sqrt2=pow(2,numeric(1,2))
Calculate components of the Moebius transform with matrix $\begin{pmatrix}a&b\\-b&a\end{pmatrix}$ from $K$
[U,V]=clifford_moebius_map(sl2_clifford([a, b, -b, a], e),[0, v], e)
The cone vertex is $(0, (v+1/v)/2, (v-1/v)/2)$. Vector from the cone's vertix to the elliptic point ($\sigma=-1$).
E=[-U.subs({sign : -1}), (v+1/v)/2-V.subs({sign : -1}), (v-1/v)/2]
Vector from the cone's vertix to the parabolic point ($\sigma=0$).
P=[-U.subs({v : v/sqrt2, sign : 0}), \
(v+1/v)/2-V.subs({v : v/sqrt2, sign : 0})/sqrt2, \
(v-1/v)/2-V.subs({v : v/sqrt2, sign : 0})/sqrt2]
Vector from the cone's vertix to the hyperbolic point ($\sigma==1$).
H=[-U.subs({sign : 1}), (v+1/v)/2, (v-1/v)/2-V.subs({sign : 1})]
Check collinearity of points E
and P
"E and P are collinear: %s" % is_collinear(E, P)
Check collinearity E
and H
"E and H are collinear: %s" % is_collinear(E, H)
This notebook is a part of the MoebInv notebooks project [2] .
References¶
Vladimir V. Kisil. Geometry of Möbius Transformations: Elliptic, Parabolic and Hyperbolic Actions of $SL_2(\mathbb{R})$. Imperial College Press, London, 2012. Includes a live DVD.
Vladimir V. Kisil, MoebInv notebooks, 2019.