극좌표 문제

극좌표 문제

극좌표를 사용할 때 지정된 각도로 어떻게 해석되는지 모르겠습니다. 저는 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}

결과:

상대 극좌표

관련 정보