答案1
区别在于单位。我们来看看第 138 页的 pgfmanual v3.1.5
也许最重要的陈述是这句话
最后,将得到的向量乘以给定的半径因子。
我们来看一个例子。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw circle[x radius=2.5,y radius=1];
\path (xyz polar cs:angle=50,x radius=2.5,y radius=1)
node[circle,fill=blue,inner sep=1.5pt]{}
(canvas polar cs:angle=50,x radius=2.5,y radius=1)
node[circle,fill=red,inner sep=1.5pt]{}
(canvas polar cs:angle=50,x radius=2.5cm,y radius=1cm)
node[circle,draw=red,inner sep=1.75pt]{};
\end{tikzpicture}
\end{document}
我们没有指定单位,xyz polar cs:
并且点在椭圆上的坐标为因素将基向量相乘。如果我们忽略 中的单位canvas polar cs:
,它们将被解释为 pt 中的有维度距离,这就是红点非常接近原点的原因。如果我们添加单位,我们就会回到蓝点。
pgfmanual 承认xyz polar
第 139 页上的名称可能会引起混淆。
所以想象一下我们已经谈论了xy polar
所有时间(但问题具体是关于xyz polar
)。
使用以下方法可获得与上述相同的输出
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[x=2.5cm,y=1cm];
\draw circle[radius=1];
\path (xy polar cs:angle=50,radius=1)
node[circle,fill=blue,inner sep=1.5pt]{}
(canvas polar cs:angle=50,radius=1)
node[circle,fill=red,inner sep=1.5pt]{}
(canvas polar cs:angle=50,x radius=2.5cm,y radius=1cm)
node[circle,draw=red,inner sep=1.75pt]{};
\end{tikzpicture}
\end{document}
你会看到,这样做的好处是我们只需要说radius=1
。xy polar cs
这一点之所以没有得到人们的重视,主要原因是
\path (50:1) node[circle,fill=blue,inner sep=1.5pt]{};
产生相同的蓝点,几乎每个人都使用最后一种语法。解析器通过检查半径是否有维度\ifpgfmathunitsdeclared
,如果没有,则将其解释为一个因子。(我建议阅读这个非常好的答案对有或没有明确单位的半径进行非常具有教育意义和清晰的讨论。)
结果是,我们大多数人可能在某个时刻都使用过 类型的极坐标(<angle>:<radius factor>)
,其中radius factor
表示我们没有给半径添加维度。此时我们使用xyz polar cs
,也许没有明确注意到它。因此,xyz polar cs
实际上是一个非常有用的坐标系,使用频率很高,也许我们用户没有注意到太多。
最后,我们要提到canvas polar
和xyz polar
实际上分别只是\pgfpointpolar
和的包装器\pgfpointpolarxy
。
\tikzdeclarecoordinatesystem{canvas polar}
{%
\tikzset{cs/.cd,angle=0,radius=0cm,#1}%
\pgfpointpolar{\tikz@cs@angle}{\tikz@cs@xradius and \tikz@cs@yradius}%
}%
\tikzdeclarecoordinatesystem{xyz polar}
{%
\tikzset{cs/.cd,angle=0,radius=0,#1}%
\pgfpointpolarxy{\tikz@cs@angle}{\tikz@cs@xradius and \tikz@cs@yradius}%
}%
后者可分别在第 1084 页和第 1085 页查找
因此,再次强调,差异在于半径与半径因子。
编辑
进一步澄清的是,看看当我们\begin{tikzpicture}[x=2.5cm,y=1cm]
将上面的示例更改为时会发生什么\begin{tikzpicture}[x=1cm,y=1cm]
。
\begin{tikzpicture}[x=1cm,y=1cm];
\draw circle[radius=1];
\path (xy polar cs:angle=50,radius=1)
node[circle,fill=blue,inner sep=1.5pt]{}
(canvas polar cs:angle=50,radius=1)
node[circle,fill=red,inner sep=1.5pt]{}
(canvas polar cs:angle=50,x radius=2.5cm,y radius=1cm)
node[circle,draw=red,inner sep=1.75pt]{};
\end{tikzpicture}
然后我们得到以下
xyz 极坐标适应 x,y 轴的拉伸。我们看到蓝色圆圈(在 xyz 极坐标中)在画布上移动,保持在半径为 1 的圆上,但红色圆周仍然远离圆圈,处于画布的同一位置。