数学 / 极坐标与参数方程 · 换一套坐标 / 极坐标系与坐标的不唯一 待审核 1 / 4
ρ 与 θ

极坐标系与坐标的不唯一

平面上定位一个点有两条路:说它向右多少、向上多少,或说它离一个定点多远、朝哪个方向。前一条是直角坐标,后一条是极坐标。两套坐标描述的是同一个平面,差别在于哪一类曲线的方程写起来短,以及一个更根本的差别——直角坐标与点一一对应,极坐标不是。本页处理这套坐标的定义、互化公式,以及不唯一带来的两个实际后果。

1 · 极坐标系的构成

定义 1.1(极坐标系) 在平面内取一个定点 OO 称为极点,自 OO 引一条射线 OxOx 称为极轴,再选定长度单位与角的正方向(通常取逆时针),即构成一个极坐标系。设 MM 是平面上一点,OM=ρ|OM| = \rho 称为 MM 的极径,以极轴为始边、射线 OMOM 为终边的角 θ\theta 称为 MM 的极角,有序数对 (ρ,θ)(\rho, \theta) 称为 MM 的极坐标。

极点自身是个例外:它到自己的距离为零,而「射线 OMOM」根本不存在,所以极点没有极角。课本通常约定极点的极坐标是 (0,θ)(0, \theta)θ\theta 任取,这条约定后面会派上用场。

角的单位取弧度还是度是排版问题,不是数学问题。本系列的读数一律用度,计算一律用弧度:Math.cos 这类函数只认弧度。

2 · 与直角坐标的互化

把直角坐标系的原点取作极点、xx 轴正半轴取作极轴,两套坐标由

x=ρcosθ,y=ρsinθx = \rho\cos\theta, \qquad y = \rho\sin\theta
ρ2=x2+y2,tanθ=yx (x0)\rho^2 = x^2 + y^2, \qquad \tan\theta = \frac{y}{x}\ (x \neq 0)

联系起来。上面一行是单值的:给一对 (ρ,θ)(\rho, \theta),落在哪个点没有商量余地。下面一行不是——ρ\rho 取算术平方根还是它的相反数是个选择,而 tanθ=y/x\tan\theta = y/x 在一圈内有两个解,正切的周期是 π\pi 而不是 2π2\pi。所以「化回极坐标」这件事必须先约定取哪一个。

核心模块 polar.ts 取的约定是 ρ0\rho \ge 0θ[0,2π)\theta \in [0, 2\pi)θ\thetaMath.atan2(y, x) 给出再折算。这一步有三处实测值得记:

  • Math.atan2(0, 0) 返回 0。极点的极角本无定义,这个 0 是浮点约定而非数学结论,所以 toPolar 在极点处返回 null,不让它流进后续的角度运算。
  • 负零把同一个方向劈成两个返回值:Math.atan2(0, -1)π\piMath.atan2(-0, -1)π-\pi。折算到 [0,2π)[0, 2\pi) 之后两者同落在 π\pi 上,这条区间约定顺手把分歧吃掉了;若区间取 (π,π](-\pi, \pi],负零那一侧就会拿到差一整圈的极角。
  • ρ\rho 小到次正规数(subnormal)区间时,方向本身开始失真。沿 θ=1\theta = 1 弧度取点、逐档缩小 ρ\rho 实测:ρ=10307\rho = 10^{-307} 时误差为零(双精度最小正规数是 2.2251×103082.2251 \times 10^{-308}),ρ=10315\rho = 10^{-315}2.23×1082.23 \times 10^{-8} 度,ρ=10320\rho = 10^{-320}0.01230.0123 度,到最小的次正规数 5×103245 \times 10^{-324}xxyy 双双被舍成同一个值,Math.atan2 只剩 45°45° 可给,偏差 12.29612.296 度。方向的精度在这一档不再由角度决定,而由 ρ\rho 决定。

最后这条在实际绘图里碰不到,画布上的坐标不会小到 1032010^{-320}。记下它是因为它点出了互化的一个结构性事实:极坐标把「位置」拆成了距离与方向两个量,而这两个量的精度并不独立。

3 · 一个点的无穷多组坐标

绕极点转一整圈回到原处,所以 θ\theta 加减 2kπ2k\pi 得到的是同一个点。这是第一套多余的表示。第二套来自允许 ρ\rho 取负值:约定 (ρ,θ)(-\rho, \theta) 表示「沿 θ\theta 的反方向量 ρ|\rho|」,于是

(ρ, θ) 与 (ρ, θ+π) 是同一个点(-\rho,\ \theta) \ \text{与}\ (\rho,\ \theta + \pi)\ \text{是同一个点}

两套合起来,非极点的每个点有无穷多组极坐标,形如 (ρ,θ+2kπ)(\rho, \theta + 2k\pi)(ρ,θ+π+2kπ)(-\rho, \theta + \pi + 2k\pi)。极点更极端:(0,θ)(0, \theta) 对任意 θ\theta 都是它。

polar.ts 据此给出一个规范形(ρ0\rho \ge 0θ[0,2π)\theta \in [0, 2\pi)、极点记作 (0,0)(0, 0)),并把「两组坐标是不是同一个点」这个判据落到直角坐标上,那边是唯一的,可以当参照。

图 3-1 · 一个点的极坐标与它的其他表示。可调 ρ\rhoθ\theta 观察点的落位,读数列出规范形与相邻几组等价坐标,并给出换算后的直角坐标。

4 · 判点与求交的改写

坐标不唯一不是排版上的小麻烦,它直接废掉了两个最常用的操作。

第一个是判断一个点在不在曲线上。直角坐标下把 (x0,y0)(x_0, y_0) 代进方程看等不等就完了;极坐标下代一组不等,只说明这一组不满足。心形线 ρ=2(1+cosθ)\rho = 2(1 + \cos\theta) 与点 M(1,300°)M(-1, 300°) 是个现成的例子:直接代得 f(300°)=3f(300°) = 3,与 ρ=1\rho = -1 相差甚远,照这一步判就是「不在曲线上」。但 MM 的规范形是 (1,120°)(1, 120°),而 f(120°)=1f(120°) = 1MM 确实在心形线上。实现里 onCurve 改为枚举各组表示逐个试;顺带一提,f(120°)f(120°) 算出来是 1.0000000000000004,判等只能带容差。

警示 · 「代进去不满足」在极坐标下推不出「不在曲线上」。要判否,须说明该点的每一组表示都不满足。

第二个是求两条曲线的交点。联立 f(θ)=g(θ)f(\theta) = g(\theta) 解出的是「两条曲线在同一个 θ\theta 上取到同一个 ρ\rho」的那些点,而两条曲线完全可以在同一个点上各用各的坐标相遇。极点是这类漏解的高发处:心形线 ρ=1+cosθ\rho = 1 + \cos\thetaθ=π\theta = \pi 处过极点,圆 ρ=3cosθ\rho = 3\cos\thetaθ=π/2\theta = \pi/2 处过极点,两个角不同,差 fgf - gθ=π\theta = \pi 处等于 44,离零远得很。实测这一对:联立方程得两个交点 (0.75,±1.299)(0.75, \pm 1.299),逐表示扫描得三个,多出来的那个就是极点。

把六组常见曲线对一起跑一遍,差距更清楚:

曲线对 联立方程 逐表示扫描
ρ=1+cosθ\rho = 1 + \cos\thetaρ=3cosθ\rho = 3\cos\theta 2 3 极点
ρ=1+cosθ\rho = 1 + \cos\thetaρ=1cosθ\rho = 1 - \cos\theta 2 3 极点
ρ=sinθ\rho = \sin\thetaρ=cosθ\rho = \cos\theta 1 2 极点
ρ=sin2θ\rho = \sin 2\thetaρ=1/2\rho = 1/2 4 8 负极径那一半
ρ=sin3θ\rho = \sin 3\thetaρ=1/2\rho = 1/2 6 6
ρ=2sinθ\rho = 2\sin\thetaρ=2cosθ\rho = 2\cos\theta 1 2 极点
合计 16 24 8

漏掉的八个里,五个是极点,四个来自 ρ\rho 取负的那些表示(ρ=sin2θ\rho = \sin 2\theta 那一行一次漏四个)。ρ=sin3θ\rho = \sin 3\theta 那一行不漏,因为奇数瓣玫瑰线在后半圈重描自身,负极径的解与已有的解重合。

图 4-1 · 两条极坐标曲线的交点。可切换曲线对,对照联立方程找到的交点与逐表示扫描找到的交点,读数给出两者的个数差与漏掉的是哪一类。

求交的操作比直角坐标多一步:解完方程,还要单独问一句两条曲线各自过不过极点。

5 · 换坐标的判据

判据不是曲线的名字,而是「这条曲线的定义里出现的是距离和角,还是横纵坐标」。圆心在极点的圆、绕定点旋转的轨迹、按角度分布的花瓣,定义里天然带着 ρ\rhoθ\theta,换过去方程就短。反过来,直线与抛物线在直角坐标下最简,硬写成极坐标只会多出一个分母。

有一类曲线两边都写得出但难度悬殊:四叶玫瑰线在极坐标下是 ρ=asin2θ\rho = a\sin 2\theta,在直角坐标下要写成 (x2+y2)3=4a2x2y2(x^2 + y^2)^3 = 4a^2x^2y^2,一个六次方程。曲线还是那条曲线,换坐标只是换了一种记账方式。

6 · 参考文献

  1. Polar coordinate system. Wikipedia. 极坐标的定义、互化公式与表示不唯一。https://en.wikipedia.org/wiki/Polar_coordinate_system
  2. Polar curve. Wikipedia. 极坐标方程给出的曲线,以及求交时的极点问题。https://en.wikipedia.org/wiki/Polar_curve
  3. Math.atan2(). MDN. atan2 的返回区间与它在原点、负零上的取值。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2
  4. Subnormal number. Wikipedia. 次正规数的表示范围与它的精度损失。https://en.wikipedia.org/wiki/Subnormal_number