Vetor normal e tangente em ponto absoluto específico em vez de ponto relativo

Vetor normal e tangente em ponto absoluto específico em vez de ponto relativo

Gostaria de desenhar um vetor normal em uma curva em um ponto específico. Pesquisei várias perguntas (por exemplo1,2,3, etc) e as respostas contêm boas soluções para desenhar uma tangente ou vetor normal para uma curva em um determinado ponto que é especificado por uma variável entre 0 e 1, fornecendo a distância movida na curva.

Outro exemplousa distâncias absolutas, mas essa coordenada ainda "viaja" ao longo da curva.

No entanto, tenho várias curvas nas quais conheço as coordenadas absolutas de um ponto (em relação ao sistema de coordenadas da imagem), mas não exatamente, onde ele fica naquela curva naquela coordenada relativa.

No exemplo a seguir (não mínimo, mas funcional), uso o código muito útil deesta respostae descobrir, por tentativa e erro, que a coordenada relativa do meu ponto P é aproximadamente 0,5573. Como usarei isso para diferentes tipos de curvas e diferentes pontos, experimentar é muito tedioso. Existe uma boa solução com 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}

captura de tela do exemplo

Responder1

Usando otzplotpacote:

insira a descrição da imagem aqui

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

informação relacionada