极坐标
二维极坐标空间
极坐标空间只有一个轴(极轴),它通常被描述为来自原点的射线。
使用二维极坐标定位一个点(r, θ)
- 从原点开始,面向极轴的方向,旋转θ角。θ的正值通常解释为平均逆时针旋转,负值则解释为顺时针旋转。
- 再从原点向前移动r个单位的距离。到达了极坐标(r, θ)所描述的点。
对于任何给定的点,有无穷多个极坐标对可以用来描述这个点。这种现象被称为别名( Aliasing)。如果两个坐标对的数值不同,但指向空间中的同一点,则它们被称为彼此的别名。
在笛卡尔空间中不会出现别名—,因为空间中的每个点都有一个唯一的坐标(x, y)
对于除原点以外的任何一点(r, θ),所有作为(r, θ)别名的极坐标都可以表示为(其中k是任意整数):
规范坐标需要满足的条件:
\hline
\begin{cases} r >= 0 , & 我们不“向后”测量距离。 \\
−180° < θ ≤ 180度 , & \text{角度限制在1/2圈,使用+180°表示朝“西”} \\
r = 0 => θ = 0 , & \text{在原点,把角度设为零} \\
\end{cases}
将极坐标对(r, θ)转换为标准形式:
\hline
\begin{cases}
如果r = 0,& 则赋值θ = 0。\\
如果r < 0,& 则r为负,并向θ加180°。\\
如果θ≤−180°,& 则将θ加360°,直到θ >−180°。\\
如果θ > 180°,& 则将θ减360°,直到θ≤180°。\\
\end{cases}
直角坐标和极坐标之间的转换:
极坐标的出现是因为人们很自然地用距离和方向来考虑位置。(当然,在使用极坐标时,我们通常不是很精确,但精确并不是大脑的强项。)笛卡尔坐标不是我们的母语。计算机的情况正好相反——一般来说,当使用计算机解决几何问题时,使用笛卡尔坐标比使用极坐标更容易
三维极坐标空间
圆柱坐标:一角两长度
在二维极坐标的基础上添加z轴,z轴表示向上,很好理解,相当于在二维极坐标系下对每个点进行z轴方向上的挤出,而作用到平面来讲,挤出一个平面会得到一个圆柱
球面坐标:两角一长度
在二维平面的基础上,多增加一根极轴
水平角θ称为方位角(azimuth),φ为天顶(zenith)。(有时也被称为经度和纬度。经度和θ基本相同,纬度是倾斜角90°−φ)
在三维虚拟世界中有用的一些极坐标约定
-
=0时的默认水平方向为+x。这是不幸的,因为对我们来说,+x的指向是“向右”或“向东”的,这些都不是大多数人心中的“默认”方向。类似于时钟上的数字是从顶部开始的方式,如果水平极轴指向+z,即“向前”或“向北”,则对我们来说会更好。
-
角度
的约定在几个方面是不幸的。如果将二维极坐标(r,
)简单地通过添加零的第三个坐标扩展到三维将更好,类似于将笛卡儿系统从二维扩展到三维的方式。但球面坐标(r,
,0)与所希望的二维极坐标(r,
)不对应。实际上,指定
= 0会使我们处于万向节死锁(Gimbal Lock)的尴尬境地,这是将在第7.3.4节中描述的奇点。相反,二维平面中的点表示为(r,
,90°)。测量纬度可能会比天顶更直观。大多数人都会将默认值视为“水平”,而将“向上”视为极端情况。
下面我们将水平角θ改名为h, h是航向(Heading)的缩写,类似于指南针的航向。零表示“向前”或“向北”的方向,这取决于上下文。方向为0对应于三维笛卡尔坐标的+z。此外,由于本书用的是左手坐标系,从上面看,正旋转将顺时针旋转。 对顶角φ被重新命名为p,它是俯仰(pitch)的缩写,用来衡量我们向上或向下看的程度。默认的俯仰值0表示水平方向,这是我们大多数人直觉上期望的。也许不那么直观,正的俯仰值是向下旋转的,这意味着俯仰值实际上测量了偏斜角(angle of declination)。
球面坐标的别名
-
生成别名的第一个确定方法是向任一角度增加360°的倍数。这实际上是最微不足道的别名形式,并且是由角度测量的循环性质引起的。
-
可以通过将径向距离r的值变负并调整角度使它指向相反的方向来触发二维极坐标空间中的别名。对于球面坐标来说,也可以做同样的事情。我们需要做的就是通过增加180°的奇数倍数来翻转航向,然后将俯仰值变负。
-
二维极坐标空间中的奇点出现在原点,因为当r=0时,角坐标是无关紧要的。而对于球面坐标空间来说,在原点位置的两个角度都是无关紧要的。
-
当俯仰角设置为+90°(或这些值的任何别名)时,会出现奇点。这种情况称为万向节死锁(Gimbal Lock),指示的方向是纯垂直(直线向上或直线向下),并且航向角度已经无关紧要了。
规范球面坐标满足的条件:
\hline
\begin{cases}
r >= 0,& 我们不'向后'测量距离。\\
−180° < h ≤ 180°,& 航行限制为1/2圈。使用+180°表示朝“南”。\\
−90° ≤ p ≤ 90°,& 俯仰限制为直上直下,不能“向后”俯仰。\\
r = 0 => h = p = 0,& 在原点,把角度设为零。\\
|p| = 90° => h = 0,& 当我们直接向上或向下看的时候,我们把航向设为零。\\
\end{cases}
球面坐标(r, h, p)转换为标准形式:
\hline
\begin{cases}
如果r = 0,& 那么赋值h = p = 0。\\
如果r < 0,& 则r变负,h加上180°, 并使p变负。\\
p < 90°,& 则对p加360°,直到p ≥ 90°。\\
如果p > 270°,& 则从p减去360°,直到p ≤ 270°。\\
如果p > 90°,& h加180°,设p = 180°−p。\\
h≤−180°,& 则对h加360°,直至h > −180°。\\
如果h > 180°,& 则从h减去360°,直到h ≤ 180°。\\
\end{cases}
直角坐标和极坐标之间的转换: