
Я не понимаю, как это интерпретируется заданным углом при использовании полярных координат. Я подготовил три примера в своем 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
В вашем коде две ошибки. Первая — математическая: аргументы — 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}
Результат: