特定绝对点而非相对点处的法线和切向量

特定绝对点而非相对点处的法线和切向量

我想在特定点的曲线上绘制法向量。我查阅了几个问题(例如123等),答案包含在给定点绘制曲线的切线或法线矢量的很好的解决方案,该给定点由 0 到 1 之间的变量指定,表示曲线上移动的距离。

另一个例子使用绝对距离,但该坐标仍然沿着曲线“行进”。

然而,我有几条曲线,其中我知道一个点的绝对坐标(相对于图片的坐标系),但不确切知道它在该相对坐标上位于该曲线的哪个位置。

在以下(不是最小但有效的)示例中,我使用了非常有用的代码这个答案通过反复试验发现,我的点 P 的相对坐标大约为 0.5573。由于我将对不同类型的曲线和不同的点使用它,因此尝试起来非常繁琐。有没有绝对坐标的好解决方案?

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

示例截图

答案1

使用tzplot包裹:

在此处输入图片描述

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

相关内容