有没有一种(简单的)方法可以在 Tikz 中提取极坐标?
动机:我将两点 (a) 和 (b) 定义为一条线和一个圆的交点(中心在原点),然后我想在圆上画一条圆弧。为此,我需要 (a) 和 (b) 的极坐标。
我在 TikZ 文档中看到,可以\pgfextractx{<dimension>}{<point>}
提取 x 坐标,并且还有用于提取 y 坐标的类似函数,但找不到用于极坐标的函数。
答案1
您可以定义自己的宏,类似于\pgfgetlastxy
提取最后的笛卡尔坐标,将它们转换为极坐标并将结果值存储在宏中:
(感谢@John Kormylo,下面的宏逐渐变成了现在简短而清晰的代码。它只需要包tikz
而不需要任何额外的库。)
\documentclass[border=1mm, tikz]{standalone}
\newcommand{\pgfgetlastpolar}[2]{
\pgfgetlastxy{\tempx}{\tempy}
\pgfmathsetmacro{#1}{atan2(\tempy,\tempx)}
\pgfmathsetlengthmacro{#2}{veclen(\tempx,\tempy)}
}
\begin{document}
\begin{tikzpicture}
\node[draw, circle] at (1,1) {};
% use analogous to `\pgfgetlastxy{\myx}{\myy}´
\pgfgetlastpolar{\mytheta}{\myrho}
\node[draw, rectangle] at (\mytheta:\myrho) {};
\end{tikzpicture}
\end{document}
答案2
如果没有定义圆、点等的最小示例代码以及所需结果的图片,那么要理解您想要什么确实很不容易。
以下是我的猜测:
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[thick]
\coordinate (a) at (20:2);
\coordinate (b) at (100:2);
\draw (0,0) circle[radius=2];
\draw[teal] (a) -- (b);
\draw[red] let \p1=(a), \p2=(b) in (\p1) arc[radius=veclen(\p1), start angle={atan2(\y1,\x1)}, end angle={atan2(\y2,\x2)}];
\end{tikzpicture}
\end{document}