
극좌표를 사용할 때 지정된 각도로 어떻게 해석되는지 모르겠습니다. 저는 MWE에서 세 가지 예를 준비했습니다.
\documentclass{article}
\usepackage{tikz} % TikZ and PGF picture
\usetikzlibrary{intersections}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{matrix,arrows,decorations.pathmorphing}
\usetikzlibrary{positioning}
\newdimen\XCoord
\newdimen\YCoord
\newcommand*{\ExtractCoordinate}[1]{\path (#1); \pgfgetlastxy{\XCoord}{\YCoord};}%
\begin{document}
\begin{figure}[htp]
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (0,1);
\coordinate (C) at (1,1);
\node[left, color=blue] at (A) {A};
\node[left, color=blue] at (B) {B};
\node[right, color=blue] at (C) {C};
\draw (A) -- (B) -- (C);
\draw [color=cyan] let \p1=(A), \p2=(B), \p3=(C),
\n1={atan2(\y2-\y1,\x3-\x1)} in
(A) -- (\n1:2cm);
\ExtractCoordinate{B};
\node [below] at (1cm,-2cm) {B $(\XCoord,\YCoord)$};
\ExtractCoordinate{C};
\node [below] at (1cm,-2.5cm) {C $(\XCoord,\YCoord)$};
\end{tikzpicture}
\begin{tikzpicture}
\coordinate (A) at (-90.58205pt, 119.0348pt);
\coordinate (B) at (-90.58205pt, 133.26117pt);
\coordinate (C) at (-40.43698pt, 119.0348pt);
\node[left, color=blue] at (A) {A};
\node[left, color=blue] at (B) {B};
\node[right, color=blue] at (C) {C};
\draw (B) -- (A) -- (C);
\draw [color=cyan] let \p1=(A), \p2=(B), \p3=(C),
\n1={atan2(abs(\y2-\y1), abs(\x3-\x1))} in
(B) -- (74.161134732:2cm);
\draw[right, color=green] (B) -- (0:2cm);
\draw[right, color=red] (B) -- (45:2cm);
\ExtractCoordinate{B};
\node [below] at (1cm,-2cm) {B $(\XCoord,\YCoord)$};
\ExtractCoordinate{C};
\node [below] at (1cm,-2.5cm) {C $(\XCoord,\YCoord)$};
\end{tikzpicture}
\begin{tikzpicture}
\coordinate (A) at (2, 2);
\draw[right, color=green] (A) -- (0:2cm);
\draw[right, color=red] (A) -- (45:2cm);
\draw[right, color=blue] (A) -- (90:2cm);
\draw[right, color=black] (A) -- (74.161134732:2cm);
\end{tikzpicture}
\end{figure}
\end{document}
- 첫 번째 예: 모든 것이 잘 작동합니다.
- 두 번째 예: 문제:
다음 명령에서:
\draw [color=cyan] let \p1=(A), \p2=(B), \p3=(C), \n1={atan2(abs(\y2-\y1), abs(\x3-\x1))} in (B) -- (74.161134732:2cm);
각도를 계산하려고 해서 B를 C에 연결했습니다. 불행하게도 실패했습니다. atan2 함수가 잘못 작동하는 줄 알고 \n1 변수의 값을 수동으로 계산한 각도로 대체했지만 다시 두 점을 연결하지 않았습니다.
극좌표를 제대로 사용할 수 없다는 결론에 도달하여 세 번째 예제에서 모든 것을 테스트해 보았습니다. 녹색 선이 수평이 될 것이라고 예상했는데, 대신 수직이 되었습니다.
설명을 위해 사진을 첨부합니다.
내가 어디에서 틀렸는지 설명해 주실 수 있나요?
답변1
코드에 두 가지 실수가 있습니다. 첫 번째는 수학적입니다. the에 대한 인수는 atan2
다음과 같습니다.엑스그리고 나서와이(이것은 프로그램마다 다르기 때문에 atan2
함수를 사용할 때 항상 확인해야 하는 사항입니다.) 또한 올바른 각도를 얻으려면 최소한 사분면이 변경되므로 절대값을 사용해서는 안 됩니다. 따라서 두 번째 예의 올바른 구문은 다음 atan2
과 같습니다.
\draw [color=cyan] let \p1=(A), \p2=(B), \p3=(C),
\n1={atan2(\x3-\x1, \y2-\y1)} in
(B) -- (\n:2cm);
첫 번째 예에서 이것이 표시되지 않는 이유는 두 좌표 표현식이 모두 1
순서가 중요하지 않고 절대값을 취하는 것으로 평가되기 때문입니다.
그러나 위의 내용은 여전히 옳지 않으며 이것이 두 번째 오류입니다. (B)
에서 까지 선을 그리고 있습니다 (\n:2cm)
. 두 번째 위치는 다음과 같이 지정됩니다.순수한\n
좌표와 각도 의 점도 마찬가지입니다 .2cm
원산지에서. 당신은 그것이 에서 오기를 원합니다 (B)
. 좌표계의 방향을 바꾸려면 다음을 사용해야 합니다.상대적인좌표. 따라서 (B) -- ++(\n:2cm)
당신이 원하는 것을 얻을 수 있습니다.
다시 말하지만, 이 경우 관심 지점이 (A)
원점에 있으므로 상대 좌표와 절대 좌표가 동일한 답을 제공하기 때문에 첫 번째 예에는 표시되지 않습니다.
이것은 세 번째 예에서도 같은 실수입니다. 좌표는 ( 위치 ) 에서 수직으로 아래에 있는 (0:2cm)
것이 됩니다 . 수평선을 얻으려면 상대선으로 만들어야 합니다: .(2,0)
(A)
(2,2)
++(0:2cm)
전체 코드:
\documentclass{article}
\usepackage{tikz} % TikZ and PGF picture
\usetikzlibrary{intersections}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{matrix,arrows,decorations.pathmorphing}
\usetikzlibrary{positioning}
\newdimen\XCoord
\newdimen\YCoord
\newcommand*{\ExtractCoordinate}[1]{\path (#1);
\pgfgetlastxy{\XCoord}{\YCoord};}%
\begin{document}
\begin{figure}[htp]
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (0,1);
\coordinate (C) at (1,1);
\node[left, color=blue] at (A) {A};
\node[left, color=blue] at (B) {B};
\node[right, color=blue] at (C) {C};
\draw (A) -- (B) -- (C);
\draw [color=cyan] let \p1=(A), \p2=(B), \p3=(C),
\n1={atan2(\y2-\y1,\x3-\x1)} in
(A) -- (\n1:2cm);
\ExtractCoordinate{B};
\node [below] at (1cm,-2cm) {B $(\XCoord,\YCoord)$};
\ExtractCoordinate{C};
\node [below] at (1cm,-2.5cm) {C $(\XCoord,\YCoord)$};
\end{tikzpicture}
\begin{tikzpicture}
\coordinate (A) at (-90.58205pt, 119.0348pt);
\coordinate (B) at (-90.58205pt, 133.26117pt);
\coordinate (C) at (0pt, 119.0348pt);
\node[left, color=blue] at (A) {A};
\node[left, color=blue] at (B) {B};
\node[right, color=blue] at (C) {C};
\draw (B) -- (A) -- (C);
\draw [color=cyan] let \p1=(A), \p2=(B), \p3=(C),
\n1={atan2(\x3-\x1,\y1-\y2)} in
(B) -- ++(\n1:4cm);
\draw[right, color=green] (B) -- ++(0:2cm);
\draw[right, color=red] (B) -- ++(45:2cm);
\ExtractCoordinate{B};
\node [below] at (1cm,-2cm) {B $(\XCoord,\YCoord)$};
\ExtractCoordinate{C};
\node [below] at (1cm,-2.5cm) {C $(\XCoord,\YCoord)$};
\end{tikzpicture}
\begin{tikzpicture}
\coordinate (A) at (2, 2);
\draw[right, color=green] (A) -- ++(0:2cm);
\draw[right, color=red] (A) -- ++(45:2cm);
\draw[right, color=blue] (A) -- ++(90:2cm);
\draw[right, color=black] (A) -- ++(74.161134732:2cm);
\end{tikzpicture}
\end{figure}
\end{document}
결과: