
곡선의 특정 지점에 법선 벡터를 그리고 싶습니다. 나는 몇 가지 질문을 찾아보았습니다(예:1,2,삼등) 및 답변에는 곡선에서 이동한 거리를 제공하는 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}