Traçando uma curva usando "função de plotagem" versus curva de Bézier (método das tangentes)

Traçando uma curva usando "função de plotagem" versus curva de Bézier (método das tangentes)

Em relação ao MWE mostrado, preciso traçar uma parábola com as seguintes propriedades:

  • A parábola começa no ponto "A"
  • A parábola termina no ponto "B"
  • O pico da parábola está no ponto "F"
  • "AE" é tangente à parábola no ponto "A"
  • "BE" é tangente à parábola no ponto "B"
  • "II" é tangente à parábola no ponto "F"

Plotei esta parábola usando três métodos:

  • Função de plotagem: A correta aquela na linha magenta
  • Curva de Bézier com 2 pontos de controle, onde apenas os pontos inicial e final são definidos (curva vermelha)
  • Curva de Bézier com 2 pontos de controle, onde são definidos os pontos inicial e final, bem como o pico da parábola (curva azul).

A questão é, como posso desenhar a parábola usando o método das tangentes (pontos de controle, curva de Bézier....) para que eu possa obter o mesmo resultado obtido através da função plot, já que nem sempre consigo obter a função da curva . Resumindo:

  • Através do conhecimento das tangentes e pontos de controle mostrados: Como posso desenhar a curva utilizando o método da curva de Bézier ( ...controles ...) de forma que o resultado seja igual à curva magenta obtida pela "Função Plot" ( qual é o correto)
  • Caso eu saiba que os ângulos em (A) e (B) são (14,036243468) graus e (82,874983651) graus respectivamente (linha horizontal: ângulo = 0) (os ângulos podem variar um pouco, é apenas para enfatizar o processo ), como posso definir o ângulo das tangentes caso também conheça os ângulos??
\documentclass{article}
\usepackage{amsmath} 
\usepackage{tikz}


\begin{document}


\begin{figure}[!htbp]
\begin{center}
\begin{tikzpicture}


%%%%%%%%%%%%%%GRID%%%%%%%%%%%%%%%%%%%%%%%%

\draw[help lines,step=0.5](0,2) grid(12,25);


\coordinate (a1) at (0,12.5);
\node[circle,inner sep=2pt,fill=none, draw=black] at (a1) (a1) {A};

\coordinate (b1) at (12,12.5);
\node[circle,inner sep=2pt,fill=none, draw=black] at (b1) (b1) {B};

\draw  [very thick] (a1) -- (b1);

\coordinate (V1) at (2*12/3,12.5-0.1*32);
\node[circle,inner sep=2pt,fill=none, draw=black] at (V1) (V1) {E};

\draw [dashed] (a1) -- (V1);
\draw [dashed] (V1) -- (b1);

\coordinate (ZS1) at (12/3^0.5,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none, draw=black] at (ZS1) (ZS1) {F};


\coordinate (V2L) at (0,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none, draw=black] at (V2L) (V2L) {I};

\coordinate (V2'L) at (04.6188,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none, draw=black] at (V2'L) (V2'L) {C};

\coordinate (V2R) at (12,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none,draw=black] at (V2R) (V2R) {I};


\coordinate (V2'R) at (12-2.3094,12.5-0.1*18.475);
\node[circle,inner sep=2pt,fill=none,draw=black] at (V2'R) (V2'R) {B};

\draw[dashed] (V2L) -- (V2R);

%RED CURVE
\draw[very thick,color=red] (a1) .. controls (V2'L) and  (V2'R) .. (b1);

%BLUE CURVE
\draw[very thick,color=blue] (a1) .. controls (V2'L) .. (ZS1) ..  controls (V2'R).. (b1);

%plot the function
\begin{scope}[shift={(0,12.5)}]
\draw[very thick,color=magenta, domain=0:12] plot (\x, {0.1*-(2*-1)*pow(\x,3)/(6*12)+\x*12*0.1*(2*-1)/6});
\end{scope}

\end{tikzpicture}
\end{center}
\end{figure} 
\end{document}

insira a descrição da imagem aqui

Responder1

Isso é mais ou menos retirado do hobbymanual.

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{hobby}
\begin{document}
\begin{tikzpicture}[tangent/.style={%
in angle={(180+#1)} ,
Hobby finish ,
designated Hobby path=next , out angle=#1,
}]
\draw[color=magenta,ultra thick, domain=0:12] plot 
(\x, {0.1*-(2*-1)*pow(\x,3)/(6*12)+\x*12*0.1*(2*-1)/6});

\draw[thick,use Hobby shortcut] ([tangent=-22]0,0) .. ([tangent=0]7,-1.85) .. 
([tangent=38]12,0);

\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

E este é um estilo que utiliza a hobbybiblioteca para construir o caminho a partir das entradas: ponto inicial, ponto final, ponta e ponto que determina as inclinações.

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc,hobby}
\begin{document}
\begin{tikzpicture}[tangent/.style={%
    in angle={(180+#1)} ,
    Hobby finish ,
    designated Hobby path=next , out angle=#1},
   para/.code={\tikzset{/tikz/params/.cd,#1}
     \def\pv##1{\pgfkeysvalueof{/tikz/params/##1}}
     \tikzset{use Hobby shortcut,insert path={let \p1=($(\pv{S})-(\pv{start})$),
        \p2=($(\pv{end})-(\pv{S})$),\n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)} in 
        ([tangent=\n1]\pv{start}) .. ([tangent=0]\pv{tip}) .. ([tangent=\n2]\pv{end})
        }}
   },params/.cd,start/.initial={-1,0},end/.initial={1,0},
    tip/.initial={0,-1},S/.initial={0,-2}]
 % define the coordinates in an intuitive way   
 \path (0,0) coordinate (A) (12,0) coordinate (B)
 (2*12/3,-0.1*32) coordinate (E)
 (12/3^0.5,-0.1*18.475) coordinate (F);
 % your plot 
 \draw[color=magenta,ultra thick, domain=0:12] plot 
    (\x, {0.1*-(2*-1)*pow(\x,3)/(6*12)+\x*12*0.1*(2*-1)/6});
 % your tangents
 \draw[dashed] (A) -- (E) (B) -- (E);
 % hobby-based path
 \draw[thick,para={start=A,end=B,tip=F,S=E}];
 % label the points
 \path foreach \X in {A,B,E,F}
 {(\X) node[circle,fill,inner sep=1pt,label=below:{$\X$}]{}};
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Observe que uma curva de Bézier cúbica possui 8 parâmetros. 3 deles são dois parâmetros de translação e um ângulo. Então você tem 5 parâmetros que podem ser usados ​​para caracterizar a curva. Você pode trabalhar de trás para frente para construir a curva acima, mas hobbyfará isso por você, pelo menos para a situação descrita aqui.

informação relacionada