Betrachten Sie die folgende symmetrische (um die vertikale Achse) Bézierkurve, die aus den 4 Punkten A
, B
, C
, und besteht D
. Jetzt möchte ich eine weitere Bézierkurve (mit dem Namen L
) nur für den linken oder rechten Teil davon konstruieren.
\documentclass[pstricks,border=24pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid=false](-3,-1)(3,3)
\pstGeonode
(3,3){A}
(1,1){B}
(-1,1){C}
(-3,3){D}
\psbezier(A)(B)(C)(D)
\psline[linecolor=red](0,3)(0,-1)
\end{pspicture}
\end{document}
Wie kann ich die Bézierkurve konstruieren, ohne vorher eine Polynomgleichung zu lösen L
? Antworten mit PSTricks (bevorzugt) oder TikZ oder Asymptote sind willkommen.
Beachten Sie, dass ich die Methode „Versuch und Irrtum“ hasse!
Antwort1
Hier ist die Asymptote
Version, die nicht die allgemeinen Befehle zum Aufteilen eines Pfads (einer Führung) verwendet Asymptote
, sondern nur eine einfache Unterteilung des kubischen Bezier
Segments durchführt:
// split.asy:
size(5cm);
pair A,B,C,D;
A=(3,3); B=(1,1); C=(-1,1); D=(-3,3);
pair P,B1,C1,B2,C2;
P=(A+D+3(B+C))/8;
B1 = (A+B)/2;
C1 = ((A+C)/2+B)/2;
C2 = (D+C)/2;
B2 = ((D+B)/2+C)/2;
guide g=A..controls B and C..D;
guide gl=A..controls B1 and C1..P;
guide gr=P..controls B2 and C2..D;
draw(g);
draw(gl,deepgreen+1.6bp+opacity(0.5));
draw(gr,red+1.6bp+opacity(0.5));
draw((0,3)--(0,-1),red);
dot(A--B--C--D--P,UnFill);
dot(B1--C1,deepgreen,UnFill);
dot(B2--C2,red,UnFill);
label("$A$",A,SE);
label("$B$",B,S);
label("$C$",C,S);
label("$D$",D,SW);
label("$P$",P,NE);
label("$B_1$",B1,E,deepgreen);
label("$C_1$",C1,E,deepgreen);
label("$B_2$",B2,W,red);
label("$C_2$",C2,W,red);
Um eine eigenständige Version zu erhalten split.pdf
, führen Sie aus asy -f pdf split.asy
.
Antwort2
Eine übersetzte Version der Asymptote-Antwort von @g.kov in PSTricks.
\documentclass[pstricks,border=24pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid=true](-3,-1)(3,3)
\pstGeonode
(3,3){A}
(1,1){B}
(-1,1){C}
(-3,3){D}
\psbezier(A)(B)(C)(D)
\psline[linecolor=red](0,3)(0,-1)
\nodexn{.125(A)+.125(D)+.375(B)+.375(C)}{R'}
\nodexn{.5(A)+.5(B)}{P'}
\nodexn{.25(A)+.5(B)+.25(C)}{Q'}
\pstGeonode
(P'){P}
(Q'){Q}
(R'){R}
\psbezier[linecolor=red](A)(P)(Q)(R)
\end{pspicture}
\end{document}