極座標の問題

極座標の問題

極座標を使用する場合、指定された角度によってどのように解釈されるのかわかりません。MWE に 3 つの例を用意しました。

    \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}
  • 最初の例: すべて正常に動作します。
  • 2番目の例: 問題:

次のコマンドでは:

\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 の値を手動で計算した角度に置き換えましたが、やはり 2 つのポイントは接続されませんでした。

極座標を適切に使用できないという結論に達したので、3 番目の例ですべてをテストしてみました。緑の線は水平になると思っていましたが、実際には線は垂直になっています。

説明のために写真を添付し​​ます。

ここに画像の説明を入力してください

どこが間違っているのか説明していただけますか?

答え1

コードに2つの間違いがあります。1つ目は数学的なものです。引数 atan2バツそしてええ(これはプログラムによって異なるため、atan2関数を使用するときは常に確認する必要があることはわかっています)。また、角度を正しくするには、少なくとも象限が変わるため、絶対値を取得しないでください。したがって、2 番目の例の正しい構文は次のatan2ようになります。

\draw [color=cyan] let \p1=(A), \p2=(B), \p3=(C),
            \n1={atan2(\x3-\x1, \y2-\y1)} in
            (B) -- (\n:2cm);

これが最初の例に表示されない理由は、両方の座標式が評価され、1順序は関係なくなり、絶対値を取得しても何も起こらないためです。

(B)しかし、上記はまだ正しくなく、これが2番目のエラーです。からに線を引いています(\n:2cm)。2番目の位置は で指定されています。絶対座標は\n度であり、2cm 起源から。 から取得したい(B)。 座標系を再設定するには、相対的座標。こうして、(B) -- ++(\n:2cm)あなたが望むものが得られます。

(A)繰り返しになりますが、最初の例では、関心のあるポイントが原点に位置しているため、相対座標と絶対座標は同じ答えを出すため、このことは表示されません。

これは 3 番目の例と同じ間違いです。座標は( に位置)から垂直に下がった に(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}

結果:

相対極座標

関連情報