Какой самый простой способ построить кривую Безье для половины симметричной кривой Безье?

Какой самый простой способ построить кривую Безье для половины симметричной кривой Безье?

Рассмотрим следующую симметричную (относительно вертикальной оси) кривую Безье, построенную по 4 точкам A, B, C, и D. Теперь я хочу построить еще одну кривую Безье (называемую L) только для левой или правой ее части.

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

введите описание изображения здесь

Как построить кривую Безье, не решив сначала полиномиальное уравнение L? Ответы с PSTricks (предпочтительно) или TikZ или Asymptote приветствуются.

Заметьте, я ненавижу метод проб и ошибок!

решение1

введите описание изображения здесь

Вот Asymptoteверсия, которая не использует общие Asymptoteкоманды для разделения пути (направляющей), она просто выполняет простое подразделение кубического Bezierсегмента:

// 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);

Чтобы получить автономный split.pdf, запустите asy -f pdf split.asy.

решение2

Перевод ответа @g.kov на Asymptote в 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}

введите описание изображения здесь

Связанный контент