数学 / 圆锥曲线 · 从三套定义到一个方程 / 直线与圆锥曲线的联立 待审核 6 / 7
判别式 · 弦长 · 点差法

直线与圆锥曲线的联立

直线与圆锥曲线的题目几乎都从联立开始:把直线方程代入曲线方程消去一个变量,得到一元二次方程。此后的信息都从这个方程里读:判别式给公共点个数,韦达定理给弦长与中点,而二次项系数本身给出一类容易漏掉的情形。

1 · 联立与判别式

以椭圆 x2a2+y2b2=1\frac{x^2}{a^2} + \frac{y^2}{b^2} = 1 与直线 y=kx+my = kx + m 为例,代入消 yy

(1a2+k2b2)x2+2kmb2x+(m2b21)=0\left(\frac{1}{a^2} + \frac{k^2}{b^2}\right)x^2 + \frac{2km}{b^2}x + \left(\frac{m^2}{b^2} - 1\right) = 0

Δ>0\Delta > 0=0= 0<0< 0 分别对应两个、一个、零个公共点。这一步与 直线与圆 那边的做法并列:圆可以用「圆心到直线的距离与半径比较」绕开联立,而椭圆没有这种半径,联立是常规路线。

竖直线 x=x0x = x_0 要单独写:它的斜率不存在,代入时消去的是 xx 而不是 yy,得到关于 yy 的方程。lineConic 按直线一般式的 BB 是否为零分这两支,两支之外没有别的情形。

图 1-1 · 直线与三族曲线的联立。可切换曲线、拖动斜率与截距,读数给出二次项系数、判别式、公共点与弦长;退化的一支单独标出。

2 · 弦长与韦达定理

设两个公共点为 A(x1,y1)A(x_1, y_1)B(x2,y2)B(x_2, y_2)yi=kxi+my_i = kx_i + m 给出 y1y2=k(x1x2)y_1 - y_2 = k(x_1 - x_2),从而

AB=1+k2x1x2|AB| = \sqrt{1 + k^2}\,|x_1 - x_2|

x1x2=(x1+x2)24x1x2|x_1 - x_2| = \sqrt{(x_1+x_2)^2 - 4x_1x_2} 可由韦达定理直接从系数算出,无须解出两个根。竖直弦的 kk 不存在,改用 AB=y1y2|AB| = |y_1 - y_2|

例 2.1 椭圆 x225+y29=1\frac{x^2}{25} + \frac{y^2}{9} = 1 与直线 y=x1y = x - 1 的弦长。联立得 (125+19)x229x+(191)=0\left(\frac{1}{25} + \frac{1}{9}\right)x^2 - \frac{2}{9}x + \left(\frac{1}{9} - 1\right) = 0,即 34x250x200=034x^2 - 50x - 200 = 0(两边乘 225225)。x1+x2=2517x_1 + x_2 = \frac{25}{17}x1x2=10017x_1x_2 = -\frac{100}{17},故 x1x2=625289+40017=7425289|x_1 - x_2| = \sqrt{\frac{625}{289} + \frac{400}{17}} = \sqrt{\frac{7425}{289}},弦长 =27425177.17= \sqrt{2} \cdot \frac{\sqrt{7425}}{17} \approx 7.17

3 · 二次项系数为零:一个公共点而不相切

联立后二次项的系数并非总不为零。它为零时方程退化成一次,恰有一个根,此时直线与曲线只有一个公共点,但这不是相切。

三族各有这样一族直线:双曲线是与渐近线平行的直线(系数 1a2k2b2\frac{1}{a^2} - \frac{k^2}{b^2}k=±bak = \pm\frac{b}{a} 处为零),抛物线是与对称轴平行的直线(y2=2pxy^2 = 2pxy=my = m 联立后没有 x2x^2 项),椭圆则没有,它的系数 1a2+k2b2\frac{1}{a^2} + \frac{k^2}{b^2} 恒为正,这也是椭圆有界的代数表现。

警示 ·「只有一个公共点」不等于「相切」。相切的判据是二次项系数不为零而判别式为零;退化的判据是二次项系数为零。两者在公共点个数上无从区分,故 lineConic 分类时先看系数、再看判别式,并把退化那一支单独标成 degenerate。含参数的题目里若答案要求「相切」,退化的那个参数值必须排除。

4 · 中点弦与点差法

已知弦的中点 (x0,y0)(x_0, y_0) 求弦所在直线,不必解方程。把两端点代入曲线方程后相减,因式分解出 x1+x2=2x0x_1 + x_2 = 2x_0y1+y2=2y0y_1 + y_2 = 2y_0,直接得到斜率:

曲线 中点弦斜率
椭圆 x2a2+y2b2=1\frac{x^2}{a^2} + \frac{y^2}{b^2} = 1 k=b2x0a2y0k = -\dfrac{b^2x_0}{a^2y_0}
双曲线 x2a2y2b2=1\frac{x^2}{a^2} - \frac{y^2}{b^2} = 1 k=b2x0a2y0k = \dfrac{b^2x_0}{a^2y_0}
抛物线 y2=2pxy^2 = 2px k=py0k = \dfrac{p}{y_0}

三式的分母都是 y0y_0y0=0y_0 = 0 意味着中点落在对称轴上,此时弦竖直,而竖直不是「斜率为无穷」,是这条弦没有斜率。实测椭圆 x216+y24=1\frac{x^2}{16} + \frac{y^2}{4} = 1 取中点 (2,0)(2, 0),公式给出 -\inftymidChordSlope 因此在 y0<109|y_0| < 10^{-9} 时返回 null,把这一情形交给调用方按竖直弦处理,而不是让 Infinity 流进后续的直线构造。

点差法还有一处前提容易漏:算出的斜率只在「该中点确实是某条弦的中点」时有意义。椭圆内部的点都满足这一条,而椭圆外部的点不满足——公式照样给出一个数,但它对应的直线与椭圆无交点。单测因此反过来验:先联立求出一条真实的弦,取它的中点代入公式,看得到的斜率是否等于这条弦两端点连线的实际斜率。

5 · 参考文献

  1. Vieta's formulas. Wikipedia. 韦达定理,弦长与中点公式的代数基础。https://en.wikipedia.org/wiki/Vieta%27s_formulas
  2. Discriminant. Wikipedia. 判别式与实根个数。https://en.wikipedia.org/wiki/Discriminant
  3. Conic section. Wikipedia. 直线与二次曲线求交的一般处理。https://en.wikipedia.org/wiki/Conic_section