数学 / 圆锥曲线 · 从三套定义到一个方程 / 轨迹方程的求法 待审核 7 / 7
五种方法 · 纯粹性检验

轨迹方程的求法

前六页的每一族曲线都从「满足某个距离条件的点的集合」出发,而把条件翻成方程那一步,各页是就地做的。本页把这一步单独拎出来:给定一个几何条件,怎样写出它决定的那条曲线的方程,以及写出来之后还欠什么。

1 · 纯粹性与完备性

定义 1.1(轨迹方程)CC 是平面上的一个点集,F(x,y)=0F(x, y) = 0 是一个方程。称该方程为 CC 的轨迹方程,当且仅当两条同时成立:CC 中每一点的坐标都满足方程(纯粹性),且满足方程的每一组坐标都给出 CC 中的点(完备性)。

两条要求是两个方向的包含关系。纯粹性说轨迹点集含于解集,完备性说解集含于轨迹点集,两者合起来才是相等。课本里的求法通常只保证前一条——推导的每一步都是「由条件推出等式」,得到的是必要条件;解集里会不会混进不满足原条件的点,推导本身不回答。

所以求轨迹的产物不是一个方程,而是一个方程加一份剔除清单。core/locus.tsLocusScene 据此把 shape(方程的解集)与 holes(须剔除的点)分作两个字段,单测也分两头验:采样点代进方程是否为零,以及解集上除 holes 外的点是否都取得到。

2 · 方法的选择与判据

五种方法的产物都是一个方程,入手处却各不相同:动点的位置由什么决定,就从那里下手。

方法 判据
直接法 几何条件能直接翻译成动点坐标之间的等式
定义法 条件化简后正好是某族圆锥曲线的定义式
相关点法 动点由另一个在已知曲线上的点带动
参数法 两个坐标各自好写成同一个参数的函数,而它们之间的直接关系不好写
交轨法 动点是两族曲线的交点,两族共用同一个参数

2.1 · 直接法

A(2,0)A(-2, 0)B(2,0)B(2, 0),动点 P(x,y)P(x, y) 使 PAPAPBPB 的斜率之积等于 mm。把两条斜率照定义写出来相乘:

yx+2yx2=m,y2=m(x24)\frac{y}{x + 2} \cdot \frac{y}{x - 2} = m, \qquad \text{即} \quad y^2 = m(x^2 - 4)

m0m \ne 0 时两边除以 4m4m,整理得 x24y24m=1\frac{x^2}{4} - \frac{y^2}{4m} = 1m<0m < 0 给出椭圆,m=1m = -1 给出圆 x2+y2=4x^2 + y^2 = 4m>0m > 0 给出双曲线,m=0m = 0 则塌成 xx 轴。写方程只用了一步代入,代价是两个点:(±2,0)(\pm 2, 0) 满足最终方程,却使 kPAk_{PA}kPBk_{PB} 没有定义,必须剔除。

2.2 · 定义法

C1\odot C_1 的圆心是 (3,0)(-3, 0)、半径 11C2\odot C_2 的圆心是 (3,0)(3, 0)、半径 r2r_2。动圆 PP 与前者外切、与后者内切,其半径记作 RR,则 PC1=R+1|PC_1| = R + 1PC2=r2R|PC_2| = r_2 - R,相加得

PC1+PC2=1+r2|PC_1| + |PC_2| = 1 + r_2

右端与 RR 无关。这已是椭圆的定义式(见 椭圆的定义与标准方程 §1),r2>5r_2 > 5 时该定值大于 C1C2=6|C_1C_2| = 6,读出 a=1+r22a = \frac{1 + r_2}{2}c=3c = 3,方程即刻写出,一次坐标都不必代。定义法省掉的是化简,省不掉的是存在性,这一点留到 §4。

2.3 · 相关点法

主动点 QQ 在圆 x2+y2=4x^2 + y^2 = 4 上,M(6,0)M(6, 0) 是定点,被动点 PP 满足 MP=μMQ\vec{MP} = \mu \vec{MQ}。在已知曲线上的是 QQPP 只被它带动,所以要先把 QQ 的坐标反解成 PP 的坐标:Q=M+1μ(PM)Q = M + \frac{1}{\mu}(P - M)。代进 QQ 满足的方程,整理得

(x6(1μ))2+y2=(2μ)2\left(x - 6(1 - \mu)\right)^2 + y^2 = (2\mu)^2

相关点法的关键步骤只有这一次反解:代进去的必须是主动点的坐标,而主动点的坐标要用被动点的坐标表出。μ=0\mu = 0 时反解失效,PP 恒等于 MM,轨迹塌成一个点。

2.4 · 参数法

tt 为参数,取

x=2(1t2)1+t2,y=2bt1+t2x = \frac{2(1 - t^2)}{1 + t^2}, \qquad y = \frac{2bt}{1 + t^2}

消参靠一个恒等式 (1t2)2+4t2=(1+t2)2(1 - t^2)^2 + 4t^2 = (1 + t^2)^2

(x2)2+(yb)2=(1t2)2+4t2(1+t2)2=1\left(\frac{x}{2}\right)^2 + \left(\frac{y}{b}\right)^2 = \frac{(1 - t^2)^2 + 4t^2}{(1 + t^2)^2} = 1

几何上 tt 与过 (2,0)(-2, 0) 的直线的斜率成比例,每条这样的直线与椭圆再交于一点,那一点就是 PPtt 取遍全体实数,唯独 (2,0)(-2, 0) 取不到:它对应竖直的那条直线,而竖直线与椭圆的第二个交点仍是它自己。消参得到的方程比轨迹多这一个点。

2.5 · 交轨法

两族直线共用参数 mm

l1:  mxy+1=0,l2:  x+mymd=0l_1: \; mx - y + 1 = 0, \qquad l_2: \; x + my - m - d = 0

l1l_1 恒过 (0,1)(0, 1)l2l_2 恒过 (d,1)(d, 1),同一个 mm 下两者的斜率是 mm1m-\frac{1}{m},互相垂直。交点 PP 看这两个定点的张角是直角,轨迹是以它们为直径的圆。消参也得同一结果:解出 x=d1+m2x = \frac{d}{1 + m^2}y=1+md1+m2y = 1 + \frac{md}{1 + m^2},代入验证即

(xd2)2+(y1)2=(d2)2\left(x - \frac{d}{2}\right)^2 + (y - 1)^2 = \left(\frac{d}{2}\right)^2

(0,1)(0, 1) 要剔除。它在每一条 l1l_1 上,却不在任何一条 l2l_2 上:代入 l2l_2d-d,而 d0d \ne 0

图 2-1 · 五种方法各自的典型构型。虚线是轨迹方程的解集,实线是参数走遍区间时动点真正描出的轨迹,两者不重合处即须剔除的部分。可切换方法,并调构型参数与动点参数。

3 · 阿波罗尼斯圆

定理 3.1 平面内到两个定点 AABB 的距离之比为常数 λ\lambdaλ>0\lambda > 0λ1\lambda \ne 1)的点,其轨迹是一个圆,称为阿波罗尼斯圆(Apollonius circle)。

证明A(a1,a2)A(a_1, a_2)B(b1,b2)B(b_1, b_2),动点 P(x,y)P(x, y)。条件 PA=λPB|PA| = \lambda |PB| 两边平方并展开,得

(1λ2)(x2+y2)2(a1λ2b1)x2(a2λ2b2)y+(a12+a22)λ2(b12+b22)=0(1 - \lambda^2)(x^2 + y^2) - 2(a_1 - \lambda^2 b_1)x - 2(a_2 - \lambda^2 b_2)y + (a_1^2 + a_2^2) - \lambda^2(b_1^2 + b_2^2) = 0

λ1\lambda \ne 1 时二次项系数 1λ21 - \lambda^2 不为零,两边除以它再配方,得圆心 Aλ2B1λ2\frac{A - \lambda^2 B}{1 - \lambda^2}、半径 λAB1λ2\frac{\lambda |AB|}{|1 - \lambda^2|} 的圆。距离非负,两边平方可逆,展开与配方都是恒等变形,故解集与轨迹逐点相等,这一次没有要剔除的点。\blacksquare

另一条算路给出同一个圆:把 ABABλ\lambda 内分与外分的两点 A+λB1+λ\frac{A + \lambda B}{1 + \lambda}AλB1λ\frac{A - \lambda B}{1 - \lambda} 各自满足距离之比为 λ\lambda,且它们是这个圆的一条直径的两端。locus.test.ts 拿它当参照量,验的是配方的结果而不必重抄配方。

λ\lambda 逼近 11 时圆心与半径的分母都是 1λ21 - \lambda^2,两者同阶发散;圆本身却没有跑掉。跑掉的是外分点 AλB1λ\frac{A - \lambda B}{1 - \lambda},它把圆拽成一条直线,那条直线就是 ABAB 的中垂线,也正是 λ=1\lambda = 1 的答案。取 A(3,0)A(-3, 0)B(3,0)B(3, 0),圆离中垂线最近的那一点的距离有闭式

x0r=31λ1+λ\bigl|\,|x_0| - r\,\bigr| = \frac{3\,|1 - \lambda|}{1 + \lambda}

1λ|1 - \lambda| 一阶趋零。λ=1104\lambda = 1 - 10^{-4} 时圆心与半径都在 3×1043 \times 10^4 量级,而这条缝只有 1.5×1041.5 \times 10^{-4}

这条缝也是「同量级大数相减」的一个现成标本。实测(node v26,双精度):1λ=1061 - \lambda = 10^{-6} 时闭式与「圆心减半径」的相对误差还只有 7.1×1057.1 \times 10^{-5}10710^{-7} 跳到 1.8×1021.8 \times 10^{-2}10810^{-8} 已是 33 倍,10910^{-9} 时直接相减给出 00,而真实缝宽是 1.5×1091.5 \times 10^{-9}apolloniusGap 只给闭式,不给相减。

图 3-1 · 到两定点距离之比为 λ\lambda 的点的轨迹。可调 λ\lambda 观察圆心与半径随 1λ21 - \lambda^2 同阶发散,并对照闭式与直接相减两种算法给出的圆到中垂线的距离。

4 · 剔除清单的来源

来源 方程为什么留不住它
分母为零、斜率不存在 直接法的 (±2,0)(\pm 2, 0) 化简时两边同乘了一个可能为零的量
参数的极限位置 参数法的 (2,0)(-2, 0)、交轨法的 (0,1)(0, 1) 消参把参数的无穷远处也算进了解集
构型自身的存在性约束 定义法里动圆的半径须为正 这一条根本没进过化简

第二类的点常被当成「差一点点就取到了」,实测不支持这个说法。参数法那一栏取 b=1.5b = 1.5t=12t = 12 时动点离洞还有 0.24980.2498t=103t = 10^3 时是 3.0×1033.0 \times 10^{-3}t=106t = 10^6 时是 3.0×1063.0 \times 10^{-6}。距离按 1/t1 / |t| 一阶趋零,加密参数只会让它更小,永远不会让它变成零。

第三类最容易漏,定义法那一栏就栽在它上面。PC1+PC2=1+r2|PC_1| + |PC_2| = 1 + r_2 认出椭圆之后方程已经写完,但动圆的半径 R=PC11R = |PC_1| - 1 还得为正,而这个要求不出现在化简过程里。C1C_1 本身是这个椭圆的一个焦点,PC1|PC_1| 的最小值是 aca - c,约束于是化为 ac>1a - c > 1,即 r2>7r_2 > 7。这一栏原先给 r2r_2 的下界取的是 5.55.5,单测第一次跑就断在 R>0R > 0 上:r2=6r_2 = 6 时左顶点处 R=0.5R = -0.5,那一段「动圆」根本不存在,椭圆左端有一整段弧不属于轨迹。改动落在构型的参数范围上(下界抬到 7.57.5),正文的推导没有跟着改;r2=7r_2 = 7 是临界值,R=0R = 0,动圆退化成点圆。

值得一提的是纯粹性那一侧一直很干净:五个构型各取四百个采样点代进自己的方程,最大残差落在 4.4×10164.4 \times 10^{-16}6.7×10166.7 \times 10^{-16} 之间,也就是两三个 ULP。出问题的从来是完备性那一侧,而完备性不归数值管,它是推导之外补上的一次逻辑检查。

5 · 参考文献

  1. Locus (mathematics). Wikipedia. 轨迹的定义,以及「点集等同于方程的解集」这一表述。https://en.wikipedia.org/wiki/Locus_(mathematics)
  2. Circles of Apollonius. Wikipedia. 阿波罗尼斯圆的定义、圆心与半径,以及比值为 1 时的退化。https://en.wikipedia.org/wiki/Circles_of_Apollonius
  3. Parametric equation. Wikipedia. 参数方程与消参,含圆的有理参数化。https://en.wikipedia.org/wiki/Parametric_equation
  4. Thales's theorem. Wikipedia. 直径所对的圆周角为直角,交轨法那一栏的几何依据。https://en.wikipedia.org/wiki/Thales%27s_theorem