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}
Responder1
Isso é mais ou menos retirado do hobby
manual.
\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}
E este é um estilo que utiliza a hobby
biblioteca 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}
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 hobby
fará isso por você, pelo menos para a situação descrita aqui.