
Me gustaría dibujar un vector normal sobre una curva en un punto específico. Busqué varias preguntas (por ejemplo1,2,3, etc) y las respuestas contienen buenas soluciones para dibujar un vector tangente o normal a una curva en un punto dado que se especifica mediante una variable entre 0 y 1 que indica la distancia recorrida en la curva.
Otro ejemploutiliza distancias absolutas, pero esa coordenada todavía "viaja" a lo largo de la curva.
Yo, sin embargo, tengo varias curvas en las que conozco las coordenadas absolutas de un punto (en relación con el sistema de coordenadas de la imagen), pero no exactamente, dónde se encuentra en esa curva en esa coordenada relativa.
En el siguiente ejemplo (no mínimo, pero funcional), utilizo el código muy útil deesta respuestay encuentre, por prueba y error, que la coordenada relativa de mi punto P es aproximadamente 0,5573. Como usaré esto para diferentes tipos de curvas y diferentes puntos, probarlo es muy tedioso. ¿Existe una buena solución con coordenadas absolutas?
\documentclass[]{scrartcl}
\usepackage{tikz}
\usepackage{xcolor}
\usetikzlibrary{arrows,calc,positioning,decorations,decorations.markings,quotes,angles}
\tikzset{tangent/.style={
decoration={
markings,% switch on markings
mark=
at position #1
with
{
\coordinate (tangent point-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,0pt);
\coordinate (tangent unit vector-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (1,0pt);
\coordinate (tangent orthogonal unit vector-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,1);
}
},
postaction=decorate
},
use tangent/.style={
shift=(tangent point-#1),
x=(tangent unit vector-#1),
y=(tangent orthogonal unit vector-#1)
},
use tangent/.default=1}
\begin{document}
\begin{tikzpicture}[%baseline={([yshift=-.0ex]current bounding box.center)},
kvect/.style={->,>=stealth}]
% coordinates
\coordinate(O) at (0,0);
\coordinate(OAend) at (90:5.5);
\coordinate(OAstart) at (-90:.5);
\coordinate(X1) at (180:.5);
\coordinate(X2) at (0:3.5);
\coordinate(P) at (40:3cm and 5cm);
\coordinate(P2) at ($1.5*(P)$);
\coordinate(ARCSTART) at (-10:3cm and 5cm);
% curve
\draw[tangent=0.5573,color=darkgray] (ARCSTART) arc (-10:95:3cm and 5cm);
% other lines
\path[kvect] (OAstart) edge (OAend); % optical axis
\path[kvect] (X1) edge (X2);
\path[kvect,color=green] (O) edge (P);
\path[dashed,color=green] (P) edge (P2);
\path [kvect,color=green, use tangent](0,0) edge (0,-3) [] {};
\path [use tangent](0,0) -- (0,-3) node (Sp) [] {};
\path pic["$\rho$",angle eccentricity=1.5,angle radius=0.6cm,draw,<-,>=stealth,color=green] {angle = Sp--P--P2};
\path pic["$\theta$",angle eccentricity=1.5,angle radius=0.6cm,draw] {angle = P--O--OAend};
\end{tikzpicture}
\end{document}
Respuesta1
Utilizando eltrama tzpaquete:
\documentclass[tikz]{standalone}
\usepackage{tzplot}
\begin{document}
\begin{tikzpicture}[font=\scriptsize]
\tzhelplines(7,6)
\tzaxes(7,6)
\tzcoor(40:3 and 5)(P)
\tzcoor($1.5*(P)$)(P2)
\tzarcfrom[gray]"arcA"(-10:3 and 5)(-10:95:3 and 5)
\tzline[->,green](0,0)(P)
\tzline[dashed,green](P)(P2)
\tztangent[blue!20,thin]"tan"{arcA}(P)[1:3.5]{tangent}[r]
\tzhXpointat{tan}{2}(P3a) % (P3a): point on tangent line
\tzcoor($(P)!1cm!90:(P3a)$)(P3) % (P3) : point on normal line
\tzgetxyval(P){\Px}{\Py}
\tzslopeat[->,green,tzextend={0pt}{2cm}]{arcA}{\Px}{.1pt}[90]
\tzanglemark[->,green](P2)(P)(P3){$\rho$}[green]
\tzrightanglemark(P3)(P)(P3a)
\tzanglemark(P)(0,0)(1,0){$\theta$}
\end{tikzpicture}
\end{document}