(*Die projektiven Koordinaten in der einfachsten Form berechnen*)verei[p_]:=Module[{h,h1,h2},
h=Together[p];
h1=PolynomialGCD[Sequence@@Numerator[h]];h2=PolynomialLCM[Sequence@@Denominator[h]];
Factor[h h2/h1]];
(*Die Gerade durch u und v*)
Verb[u_,v_]:=verei[Cross[u,v]];
(*Schnittpunkt der Geraden u und v*)
Schneid[u_,v_]:=Verb[u, v];
(*Orthoganle zu v durch u*)
Orth[u_, v_] :=verei[{v[[2]]u[[3]],-v[[1]]u[[3]],-u[[1]]v[[2]]+u[[2]]v[[1]]}];
(*Die Strecke uv im Verhaelnis t teilen*)
Teil[u_,v_,t_] := 
   verei[{-t u[[3]]v[[1]]+u[[1]]v[[3]],-t u[[3]]v[[2]]+u[[2]]v[[3]],
      -(-1+t)u[[3]]v[[3]]}];
(*Den Punkt u an der Gerade v spiegeln*)
Spieg[u_,v_] := Teil[u, Schneid[v,Orth[u,v]],2]; 
(*Die Mittelsenkrechte der Strecke mit den Endpunkten u und v*)
Mitt[u_,v_] := Orth[Teil[u,v,-1], Verb[u,v]]; 
(*Umkreiszentrum des Dreiecks u,v,w*)
Umk[u_,v_,w_]:=Schneid[Mitt[u,v],Mitt[u,w]];
(*Quadrat der Entfernung der Punkte u und v*)
Distq[u_, v_]:=
   Factor[(u[[1]]/u[[3]]-v[[1]]/v[[3]])^2+(u[[2]]/u[[3]]-v[[2]]/v[[3]])^2];
(*Den Punkt p am Kreis mit Zentrum m und Radius r invertieren*)
Invert[p_,m_,r_]:=Teil[m,p,1/(1-Distq[p,m]/r^2)];
(*Inhalt des Dreiecks u,v,w*)
Inh[u_,v_,w_]:=Factor[Det[{u/u[[3]],v/v[[3]],w/w[[3]]}]/2];
(*Tangens des orientierten Winkels uvw*)
Tg[u_,v_,w_] := Module[{h1,h2},
h1=(w[[2]]v[[3]]-v[[2]]w[[3]])(u[[1]]v[[3]]-v[[1]]u[[3]])-
                  (w[[1]]v[[3]]-v[[1]]w[[3]])(u[[2]]v[[3]]-v[[2]]u[[3]]);
h2=(w[[1]]v[[3]]-v[[1]]w[[3]])(u[[1]]v[[3]]-v[[1]]u[[3]])+
                  (w[[2]]v[[3]]-v[[2]]w[[3]])(u[[2]]v[[3]]-v[[2]]u[[3]]);
Factor[h1/h2]];
(*Kollinearitaet der Punkte u,v,w*)
KollQ[u_,v_,w_]:=Factor[Det[{u,v,w}]]==0;
(*Inzidenz Punkt u und Gerade v*)
InzQ[u_,v_]:=Factor[Dot[u,v]]==0;
(*Die Polare des Punkts p bzgl dem Kegelschnitt keg*)
Polare[p_,keg_]:=Module[{k},
k= Coefficient[keg,{x^2,y^2,z^2,y z,z x,x y}];verei[Dot[{{2*k[[1]],k[[6]],k[[5]]},{k[[6]],2k[[2]],k[[4]]}, 
      {k[[5]],k[[4]],2k[[3]]}},p]]]
(*Pol der Gerade g bzgl dem Kegelschnitt keg*)
Pol[g_,keg_]:=Schneid[Polare[Schneid[g,{0,1,0}],keg],Polare[Schneid[g,{1,0,0}],keg]];