Höhere Mathematik sehen und verstehen, 
Haftendorn, Riebesehl, Aug. 2021       Interaktive Version mit kostenlosem Mathematica Player

Trisektrix mit rationalen Béziersplines

Herleitung einer Parameterdarstellung für Trisektrix

Vorgehen: Eine beliebige Gerade durch die Singularität schneidet die Trisektrix. 
Die Steigung t dieser Geraden eignet sich als Parameter.   
Ziehe t im interaktiven Kasten.

Trisektrix   (a + x)(y^2) = (3a − x)(x^2) Kurvenbuch Seite 64

trisektrix=ContourPlot[{(1+x)(y^2)-(3-x)(x^2)==0
},{x,-1,3.2},{y,-2,2}, AspectRatio->1, ContourStyle->{Red}];

Manipulate[Show[trisektrix,Plot[t x,{x,-1,3.2}, PlotRange->{-2,2}]],
{{t,-0.4},-3,3},SaveDefinitions->True]

Solve[{(a+x)(y^2)-(3 a-x)(x^2)==0, y==t x},{x,y}]
(*Schnittpunkte der Geraden durch die Singularität mit der Trisktrix*)

Das ist nun die Parameterdarstellung der Trisektrix

Definition rationaler Bézierspline-Basis

Bernsteinpolynome

b[0,t_]:=(((1-t))^3);
b[1,t_]:=3t(((1-t))^2); 
b[2,t_]:=3(t^2)(1-t);b[3,t_]:=(t^3)

Rw=.

Rw[i_,t_]:=((ww[i] b[i,t])/(Sum[ww[j] b[j,t],{j,0,3}])); 
Rw[i,t]

((b[i,t] ww[i])/((((1-t))^3) ww[0]+3 (((1-t))^2) t ww[1]+3 (1-t) (t^2) ww[2]+(t^3) ww[3]))

Bestimmung der Gewichte aus der Parameterdarstellung

{x->((3 a-a (t^2))/(1+(t^2))),y->((3 a t-a (t^3))/(1+(t^2)))}  (*Trisektrix, Schlaufenbreite 3a*)

Die Gewichte müssen aus dem Nenner bestimmt werden

nenner=Sum[ww[j] b[j,t],{j,0,3}]

CoLi=CoefficientList[nenner,t] (* für Koeffizientenvergleich*)

lo=Solve[CoLi=={1,0,1,0},{ww[0],ww[1],ww[2],ww[3]}]

Also sind die Gewichte (übrigens ebenso wie für den Kreis)

W={ww[0],ww[1],ww[2],ww[3]}/.lo[[1]]

nenner=Sum[ww[i] b[i,t],{i,0,3}]/.lo[[1]]//Simplify   (* wie erwartet*)

Vergleich der Bernsteinpolynome mit der rationalen Version

Verwendung der Gewichte auch im Zähler für die Trisektrix

lo[[1]]

R[i_,t_]:=((ww[i] b[i,t])/nenner)/.lo[[1]]

{R[0,t],R[1,t],R[2,t],R[3,t]}//Simplify

alle=Plot[{R[0,t],R[1,t],R[2,t],R[3,t],b[0,t],b[1,t],b[2,t],b[3,t]},{t,0,1}]
nurRat=Plot[{R[0,t],R[1,t],R[2,t],R[3,t]},{t,0,1}]

Unten allein, oben auch: Dunkelblau R0, Ocker R1, Grün R2, Rot R3, 
Bezier außerdem:  Lila b0, Braun b1, Hellblau b2, Hellgelb b3

Rationale B-Splines  für die Trisektrix

Trisektrix Parameterdarstellung

x[t_]:=((a (3-(t^2)) )/((1+(t^2)))); y[t_]:=((a t(3-(t^2)) )/((1+(t^2))))

Nenner wie beim Kreis führt zu  den Gewichten

{ww[0]=1,ww[1]=1,ww[2]=(4/3),ww[3]=2}

und damit auch zu denselben rationalen B-Splines

R[i_,t_]:=((ww[i] b[i,t])/(1+(t^2)))

{R[0,t],R[1,t],R[2,t],R[3,t]}//Simplify

Berechnung der Steuerpunkte

Punkte

P={{Axx,Ayy}, {Bxx,Byy},{Cxx,Cyy},{Dxx,Dyy}}

Berechnung x-Koordinaten

xwerte=Axx R[0,t]+Bxx R[1,t]+Cxx R[2,t]+Dxx R[3,t]//Simplify//Numerator

xco=CoefficientList[xwerte,t]

x[t_]:=((a (3-(t^2)) )/((1+(t^2)))); y[t_]:=((a t(3-(t^2)) )/((1+(t^2))))

Eq=xco=={3a,0,-a,0};

solx=Solve[Eq,{Axx,Bxx,Cxx,Dxx}]

Berechnung y-Koordinaten

ywerte=Ayy R[0,t]+Byy R[1,t]+Cyy R[2,t]+Dyy R[3,t]//Simplify//Numerator

yco=CoefficientList[ywerte,t]

Eqy=yco=={0,3a,0,-a};

soly=Solve[Eqy,{Ayy,Byy,Cyy,Dyy}]

Steuerpunkte sind also, 3a=Schlaufenbreite

{A={3a,0},B={3a,a},Cc={2a,((3 )/2)a},Dd={a,a}}

x[t_]:=((a (3-(t^2)) )/((1+(t^2)))); y[t_]:=((a t(3-(t^2)) )/((1+(t^2))))

Parameterdarstellung mit rationalen Béziersplines (wie erwartet)

Axx R[0,t]+Bxx R[1,t]+Cxx R[2,t]+Dxx R[3,t]/.solx//Simplify

Ayy R[0,t]+Byy R[1,t]+Cyy R[2,t]+Dyy R[3,t]/.soly//Simplify

{A={3a,0},B={3a,a},C={2a,((3 )/2)a},D={a,a}}

GeoGebra-Dateien dazu  echte-Trisektrix.ggb