Höhere Mathematik sehen und verstehen, 
Haftendorn, Riebesehl, Aug. 2021

Versiera mit rationalen Béziersplines

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)

Herleitung einer Parameterdarst. für Versiera

Vorgehen: Eine beliebige Gerade durch die Singularität schneidet die Versiera. 
Die Steigung t diese Geraden eignet sich als Parameter.

Versiera   (4(a^2)+(x^2))y=8(a^3) Kurvenbuch Seite 80

a=2;Versiera=ContourPlot[{(4(a^2)+(x^2))y==8 (a^3)},{x,-4,4},{y,0,5}, AspectRatio->1, ContourStyle->{Red}]
a=.

Manipulate[Show[Versiera,ContourPlot[x==4t ,{x,-3,3.2},{y,0,4}]],
{{t,-0.5},-1,1}]

Solve[{(4(a^2)+(x^2))y==8 (a^3), x==2a t },{x,y}]

Definition rationaler Bézierspline-Basis

Rw=.

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

Bestimmung der Gewichte aus der Parameterdarstellung

{x->((2 a t+ 2  a (t^3))/(1+(t^2))),y->((2 a )/(1+(t^2)))}  (* Versiera, Kreis um (0,a) Radius a *)

Die Gewichte müssen aus dem Nenner bestimmt werden

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

CoLi=CoefficientList[nenner,t]

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={1,1,(4/3),2};

w[i_]:=W[[i+1]]

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

Vergleich der Bernsteinpolynome mit der rationalen Version

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

R[i_,t_]:=((w[i] b[i,t])/nenner)

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

nurRatdick=Plot[{((((1-t))^3)/(1+(t^2))),((3 (((1-t))^2) t)/(1+(t^2))),((4 (1-t) (t^2))/(1+(t^2))),((2 (t^3))/(1+(t^2)))},{t,0,1},
PlotStyle->Thickness[0.02]]

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}]

Steuerpunkte für die Versiera

Punkte

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

Versiera Parameterdarstellung

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

Nenner wie beim Kreis führt zu

Berechnung der Steuerpunkte

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]

Eq=xco=={0,2a,0,2a};

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

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

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=={2a,0,0,0};

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

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={0,2a},B={(2/3)a,2a},C={a,((3 )/2)a},D={2a,a}}

GeoGebra-Dateien dazu  versiera-NURBS.ggb

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]

EqKV=xco=={0,2r,0,0};

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

xk[t_]:=((2  r t)/(1+(t^2))); yk[t_]:=((2 r (t^2))/(1+(t^2)))

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]

EqyKV2=yco=={0,2r,0,0};

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

Steuerpunkte sind also, r=radius, M=(0,r)

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

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={0,0},B={(2/3)r,0},C={r,((1 )/2)r},D={r,r}}

Das ist wieder mit Umwendung, ich versuche mal mit der von oben.

Berechnung der Steuerpunkte für denVersiera-Kreis in Version 2

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]

EqKV2=xco=={0,2r,0,0};

solx2=Solve[EqKV2,{Axx,Bxx,Cxx,Dxx}]

xk[t_]:=((2  r t)/(1+(t^2))); yk[t_]:=((2 r )/(1+(t^2)))

Berechnung y-Koordinaten

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

yco2=CoefficientList[ywerte,t]

EqyKV2=yco2=={2r,0,0,0};

soly2=Solve[EqyKV2,{Ayy,Byy,Cyy,Dyy}]

Steuerpunkte sind also, r=radius, M=(0,r)

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

Parameterdarstellung mit rationalen Béziersplines (wie erwartet)

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

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

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

Dies ist die günstige Version

Anmerkung: Das Gerüst ist dasselbe wie für den Kreis aus unserem Buch, nur um r nach oben verschoben, wie ja auch der Kreis.  Die Lage in bezug auf den Kreis ist dieselbe.

Dazu Versiera-NURBS.ggb