Problema de coordenadas polares

Problema de coordenadas polares

Não entendo como isso é interpretado por um ângulo especificado ao usar coordenadas polares. Preparei três exemplos em meu 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}
  • primeiro exemplo: tudo funciona bem.
  • segundo exemplo: problema:

No seguinte comando:

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

Tentei calcular o ângulo e juntei B a C. Infelizmente, sem sucesso. Achei que a função atan2 funcionava errado, então substituí o valor na variável \n1 pelo ângulo calculado manualmente, mas novamente não conectei os dois pontos.

Cheguei à conclusão de que não consigo usar corretamente as coordenadas polares, então tentei testar tudo no terceiro exemplo. Eu esperava que a linha verde fosse horizontal, mas em vez disso, a linha é vertical.

Para ilustração, anexo uma foto:

insira a descrição da imagem aqui

Você pode explicar onde estou errado?

Responder1

Existem dois erros no seu código. O primeiro é matemático: os argumentos para the atan2são osxe então osim(Eu sei que isso varia de programa para programa, então é algo que você deve sempre verificar ao usar atan2funções); além disso, para obter o ângulo correto, você não deve tomar os valores absolutos, pois isso altera pelo menos o quadrante. Portanto, a sintaxe correta para o atan2seu segundo exemplo seria:

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

A razão pela qual isso não aparece no seu primeiro exemplo é porque ambas as expressões de coordenadas são avaliadas e 1a ordem não importa e a obtenção de valores absolutos não faz nada.

No entanto, o que foi dito acima ainda não está certo e este é o segundo erro. Você está desenhando uma linha de (B)até (\n:2cm). A segunda posição é especificada emabsolutocoordenadas e também um ponto em \ngraus e2cm desde a origem. Você quer que seja de (B). Para reorientar o sistema de coordenadas, você deve usarrelativocoordenadas. Assim (B) -- ++(\n:2cm)você consegue o que deseja.

Novamente, isso não aparece no primeiro exemplo porque seu ponto de interesse, (A)nesse caso, está localizado na origem, então as coordenadas relativas e absolutas dão a mesma resposta.

Este é o mesmo erro no seu terceiro exemplo. A coordenada (0:2cm)torna-se (2,0)verticalmente abaixo de (A)(localizada em (2,2)). Para obter uma linha horizontal você precisa torná-la relativa: ++(0:2cm).

Código completo:

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

Resultado:

coordenadas polares relativas

informação relacionada