本文已参与[新人创作礼]活动,一起开启掘金创作之路
图形学的数学基础(十五):极坐标系
笛卡尔坐标系不是精确绘制空间和定义位置的唯一系统。笛卡尔系统的替代方案是极坐标系(PolarCoordinateSystem)
二维极坐标系
二维笛卡尔坐标系有一个原点和两个穿过原点的轴(x,y)。二维极坐标空间也有一个原点,称为极点(Pole)-定义了坐标空间的中心,不同的是,极坐标系只有一个轴,称为极轴(PolarAxis),

定义
在极坐标系中,我们通常用(r,θ)定义一个点,r为极轴的长度,θ为极轴旋转角度(逆时针方向).

别名
极坐标系中有一个不同于笛卡尔坐标系的显著特征.笛卡尔坐标系中空间中一个点对应唯一的坐标(x,y),而在极坐标中,空间中的一个点可能对应多个坐标.原因就在于极坐标系的定义(r,θ)。θ与θ+360°指定的是同一个方向。也可以将θ+180°同时r取反来实现。
因此:(r,θ)=(r,θ+360°)=((−1)kr,θ+k180°)。
尽管存在别名,但是我们尽可能需要采用最优的描述点的方式。描述任何给定点的“首选”方式称为该点的规范(Canonical)坐标,规范化坐标需要满足以下三个条件:
- r>=0
- −180°<θ<=180°
- 如果r=0,则θ=0
笛卡尔坐标系和极坐标转换(二维)
假设二维空间中的一点P,笛卡尔坐标为(x,y),极坐标表述为(r,θ),则它们之间的转换关系如下:

笛卡尔坐标系和极坐标转换主要用到了三角函数.
二维极坐标系转换为笛卡尔坐标系
x=rcosθ
y=rsinθ
笛卡尔坐标系转换极坐标系
r=x2+y2
θ=arctan2(y,x)
三维极坐标系
极坐标系同样可应用于三维,三维极坐标系有三个值,是从二维极坐标系拓展而来的,第三个坐标值可以是角度也可以是另外个长度。这样就衍生出了两种极坐标系。
圆柱坐标(CylindricalCoordinate)
如果第三个极坐标值添加的是线性距离(z),那么得到的就是一个圆柱坐标。

球面坐标和三维笛卡尔坐标转换
由上图可知,球面坐标和三维笛卡尔坐标的z值是相同的,因此只需要按照二维极坐标的转换逻辑转换xy值即可
圆柱坐标转换为三维坐标:
x=rcosθ
y=rsinθ
z=z
三维坐标转换为圆柱坐标:
r=x2+y2
θ=arctan2(y,x)
z=z
球面坐标(SphericalCoordinateSystem)
更常见的三维坐标系是球面坐标系,球面坐标具有两个角度和一个距离(r,θ,ϕ)。三维球形空间中有两个极轴: 第一个水平轴,对应二维极坐标中的极轴,另一个垂直轴 对应三维笛卡尔坐标的+y。
三维极坐标定位方式
- 站在原点,面向水平极轴方向(x),垂直轴的指向从脚指向头部。右臂向上。指向垂直极轴。
- 逆时针旋转θ
- 将手臂向下旋转角度ϕ,右臂现在指向极角θ和ϕ的方向。
- 沿着该方向从原点移动距离r,这时你就叨叨了球面坐标(r,θ,ϕ)描述的点。

水平角θ称为方位角(Azimuth),ϕ称为天顶(Zenith)。我们日常使用的经纬度其实也是一种球面坐标系。经度(Longitude)与θ相同,维度(Latitude)是90°−ϕ。由于我们通常只描述行星表面的点,所以r是个常数。
球面坐标规范化条件
- r>=0
- 180°<θ<=180°
- −90°<ϕ<=90°
- 如果r=0,则θ=0°ϕ=0°
- 如果∣ϕ∣=90°,则θ=0°
球面坐标和三维笛卡尔坐标的转换(右手系)

由上图可知:
球面坐标->三维笛卡尔坐标:
d=rsinϕ
x=dcosθ=rsinϕcosθ
y=dsinθ=rsinϕsinθ
z=rcosϕ
三维笛卡尔坐标->球面坐标:
r=x2+y2+z2
θ=arctan2(y,x)
ϕ=arctan2(d,z)
参考
《3D数学基础》图形和游戏开发(第二版)