点斜式 → 一般式
直线方程的五种形式
同一条直线可以有多种方程写法。前四种各自要求某个量存在,一般式则对全体直线成立。选择哪一种取决于题目给出什么条件,而检查答案时通常化为一般式再比较。
1 · 点斜式与斜截式
已知一点
P 0 ( x 0 , y 0 ) P_0(x_0, y_0) P 0 ( x 0 , y 0 )
与斜率
k k k :
y − y 0 = k ( x − x 0 ) y - y_0 = k(x - x_0) y − y 0 = k ( x − x 0 )
已知斜率
k k k
与纵截距
b b b (即过点
( 0 , b ) (0, b) ( 0 , b ) ):y = k x + b y = kx + b y = k x + b 。斜截式是点斜式取
x 0 = 0 x_0 = 0 x 0 = 0
的特例。
两式都要求斜率存在,故都写不出竖直线。「过点
( 2 , 3 ) (2, 3) ( 2 , 3 )
且与某圆相切的直线」这类题目里,若不先讨论竖直的情形,答案就会漏掉
x = 2 x = 2 x = 2
这一条。
2 · 两点式与截距式
已知两点
P 1 ( x 1 , y 1 ) P_1(x_1, y_1) P 1 ( x 1 , y 1 ) 、P 2 ( x 2 , y 2 ) P_2(x_2, y_2) P 2 ( x 2 , y 2 ) ,且
x 1 ≠ x 2 x_1 \ne x_2 x 1 = x 2 、y 1 ≠ y 2 y_1 \ne y_2 y 1 = y 2 :
y − y 1 y 2 − y 1 = x − x 1 x 2 − x 1 \frac{y - y_1}{y_2 - y_1} = \frac{x - x_1}{x_2 - x_1} y 2 − y 1 y − y 1 = x 2 − x 1 x − x 1
两个分母都不能为零,故两点式既写不出竖直线也写不出水平线。把它去分母整理成
( y 2 − y 1 ) ( x − x 1 ) − ( x 2 − x 1 ) ( y − y 1 ) = 0 (y_2 - y_1)(x - x_1) - (x_2 - x_1)(y - y_1) = 0 ( y 2 − y 1 ) ( x − x 1 ) − ( x 2 − x 1 ) ( y − y 1 ) = 0
之后限制就消失了——这正是一般式。
已知横截距
a a a
与纵截距
b b b (直线交两轴于
( a , 0 ) (a, 0) ( a , 0 )
与
( 0 , b ) (0, b) ( 0 , b ) ):x a + y b = 1 \frac{x}{a} + \frac{y}{b} = 1 a x + b y = 1 。截距式的限制最紧:a a a
与
b b b
都不能为零,因此过原点的直线没有截距式 ,两条坐标轴本身也没有。
图 2-1 · 五种写法轮换。可切换写法并拖动它的参数,图上是同一条直线,方程牌给出当前写法与化成的一般式;写法失效时牌上标出原因。
3 · 一般式
A x + B y + C = 0 ( A , B 不同时为零 ) Ax + By + C = 0 \quad (A, B \text{ 不同时为零}) A x + B y + C = 0 ( A , B 不同时为零 )
平面上任意直线都能写成这个形式,反之任意这样的方程都表示一条直线。三个系数各自的含义:B ≠ 0 B \ne 0 B = 0
时斜率是
− A B -\frac{A}{B} − B A ,纵截距是
− C B -\frac{C}{B} − B C ;B = 0 B = 0 B = 0
即竖直线
x = − C A x = -\frac{C}{A} x = − A C 。
代价是系数不唯一:3 x + 4 y − 10 = 0 3x + 4y - 10 = 0 3 x + 4 y − 10 = 0
与
6 x + 8 y − 20 = 0 6x + 8y - 20 = 0 6 x + 8 y − 20 = 0
是同一条直线,全体系数同乘一个非零数即得另一组。判断两个一般式是否表示同一条直线,不能逐个比系数,要先归一化(见 平行、垂直与距离 §4)。
4 · 实现里为什么只留一般式
core/geom.ts 内部一律以
( A , B , C ) (A, B, C) ( A , B , C )
三元组存直线,四种写法都只是构造函数。这个选择不是审美:斜截式写不出竖直线,而「斜率不存在」这一支若渗进每个函数,平行判定、垂直判定、交点、距离全都要各带一套分情形。改用一般式之后,平行是
A 1 B 2 − A 2 B 1 = 0 A_1B_2 - A_2B_1 = 0 A 1 B 2 − A 2 B 1 = 0 、垂直是
A 1 A 2 + B 1 B 2 = 0 A_1A_2 + B_1B_2 = 0 A 1 A 2 + B 1 B 2 = 0 ,两个表达式都不含分母,也不含例外。
例 4.1 求过
( 1 , 2 ) (1, 2) ( 1 , 2 )
与
( 1 , 5 ) (1, 5) ( 1 , 5 )
的直线。两点横坐标相同,两点式的分母
x 2 − x 1 = 0 x_2 - x_1 = 0 x 2 − x 1 = 0 ,点斜式与斜截式也都无从下手。一般式直接给出:A = y 2 − y 1 = 3 A = y_2 - y_1 = 3 A = y 2 − y 1 = 3 、B = x 1 − x 2 = 0 B = x_1 - x_2 = 0 B = x 1 − x 2 = 0 、C = − ( 3 ⋅ 1 ) = − 3 C = -(3 \cdot 1) = -3 C = − ( 3 ⋅ 1 ) = − 3 ,即
3 x − 3 = 0 3x - 3 = 0 3 x − 3 = 0 ,也就是
x = 1 x = 1 x = 1 。
A A A 、B B B
的这两个取法就是 lineFromTwoPoints 的实现:A = y 2 − y 1 A = y_2 - y_1 A = y 2 − y 1 、B = x 1 − x 2 B = x_1 - x_2 B = x 1 − x 2 、C = − ( A x 1 + B y 1 ) C = -(Ax_1 + By_1) C = − ( A x 1 + B y 1 ) 。它对任意两个不重合的点都给出正确结果,重合时
A A A
与
B B B
同时为零,函数返回 null——「两点重合确定不了唯一直线」这件事因此在类型上就得表达,而不是靠调用方记得检查。
5 · 参考文献
Linear equation . Wikipedia. 直线方程的各种形式及其相互转换。https://en.wikipedia.org/wiki/Linear_equation
Intercept . Wikipedia. 截距的定义与截距式的适用条件。https://en.wikipedia.org/wiki/Y-intercept
上一篇 倾斜角与斜率
下一篇 平行、垂直与距离