Con respecto al MWE mostrado, necesito trazar una parábola con las siguientes propiedades:
- La parábola comienza en el punto "A"
- La parábola termina en el punto "B".
- El pico de la parábola está en el punto "F".
- "AE" es tangente a la parábola en el punto "A"
- "BE" es tangente a la parábola en el punto "B"
- "II" es tangente a la parábola en el punto "F"
Tracé esta parábola usando tres métodos:
- Función de trama: la correcta la de la línea magenta
- Curva Bezier con 2 puntos de control, donde solo se definen el punto inicial y final (Curva roja)
- Curva de Bézier con 2 puntos de control, donde se definen los puntos inicial y final así como el pico de la parábola (curva azul).
El problema es, ¿cómo puedo dibujar la parábola usando el método de las tangentes (puntos de control, curva de Bézier....) para poder obtener el mismo resultado que se logra mediante la función de trazado, ya que no siempre puedo obtener la función de la curva? . En resumen:
- A través del conocimiento de las tangentes y puntos de control se muestra: ¿Cómo puedo dibujar la curva usando el método de la curva de Bézier (...controles...) de manera que el resultado sea el mismo que la curva magenta obtenida por la "Función de trazado" ( Cual es la correcta)
- En caso de que sepa que los ángulos en (A) y (B) son (14.036243468) grados y (82.874983651) grados respectivamente (línea horizontal: ángulo = 0) (los ángulos pueden variar un poco, es solo para enfatizar el proceso ), ¿cómo puedo definir el ángulo de las tangentes si también conozco los á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}
Respuesta1
Esto está más o menos tomado del 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}
Y este es un estilo que utiliza la hobby
biblioteca para construir el camino a partir de las entradas: punto inicial, punto final, punta y punto que determina las pendientes.
\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 una curva de Bézier cúbica tiene 8 parámetros. 3 de ellos son dos parámetros de traslación y un ángulo. Entonces tienes 5 parámetros que pueden usarse para caracterizar la curva. Puede trabajar hacia atrás para construir la curva anterior, pero hobby
lo hace por usted, al menos para la situación que describe aquí.