ACM入门之【简单几何】

204 阅读2分钟

点到直线的距离(已知直线上两点)

已知条件

  • 直线经过两点:A(x1,y1)A(x_1, y_1)B(x2,y2)B(x_2, y_2)
  • 空间中一点:P(x0,y0)P(x_0, y_0)
  • 要求:点 ( P ) 到直线 ( AB ) 的距离 ( d )

方法一:向量叉积公式

d=(x2x1)(y0y1)(y2y1)(x0x1)(x2x1)2+(y2y1)2d = \frac{|(x_2 - x_1)(y_0 - y_1) - (y_2 - y_1)(x_0 - x_1)|}{\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}}

方法二:转化为直线方程

直线 (AB) 的方程为:

(y2y1)x(x2x1)y+(x2y1y2x1)=0(y_2 - y_1)x - (x_2 - x_1)y + (x_2 y_1 - y_2 x_1) = 0

点到直线的距离公式:

d=Ax0+By0+CA2+B2d = \frac{|Ax_0 + By_0 + C|}{\sqrt{A^2 + B^2}}

三角形面积公式(已知三个点的坐标)

设三角形三个顶点为:

  • A(x1,y1)A(x_{1}, y_{1})
  • B(x2,y2)B(x_{2}, y_{2})
  • C(x3,y3)C(x_{3}, y_{3})

方法一:行列式公式(推荐)

S=12x1(y2y3)+x2(y3y1)+x3(y1y2)S = \tfrac{1}{2} \left| x_{1}(y_{2} - y_{3}) + x_{2}(y_{3} - y_{1}) + x_{3}(y_{1} - y_{2}) \right|

方法二:向量叉积公式

取向量:

AB=(x2x1,  y2y1),AC=(x3x1,  y3y1)\overrightarrow{AB} = (x_{2} - x_{1}, \; y_{2} - y_{1}), \quad \overrightarrow{AC} = (x_{3} - x_{1}, \; y_{3} - y_{1})

那么面积为:

S=12AB×ACS = \tfrac{1}{2} \, \big| \overrightarrow{AB} \times \overrightarrow{AC} \big|

展开后:

S=12(x2x1)(y3y1)(x3x1)(y2y1)S = \tfrac{1}{2} \left| (x_{2} - x_{1})(y_{3} - y_{1}) - (x_{3} - x_{1})(y_{2} - y_{1}) \right|

方法三:海伦公式(通过三边长)

先算三边长:

AB=(x2x1)2+(y2y1)2AB = \sqrt{(x_{2} - x_{1})^{2} + (y_{2} - y_{1})^{2}}
BC=(x3x2)2+(y3y2)2BC = \sqrt{(x_{3} - x_{2})^{2} + (y_{3} - y_{2})^{2}}
CA=(x1x3)2+(y1y3)2CA = \sqrt{(x_{1} - x_{3})^{2} + (y_{1} - y_{3})^{2}}

然后:

p=AB+BC+CA2p = \frac{AB + BC + CA}{2}
S=p(pAB)(pBC)(pCA)S = \sqrt{p(p - AB)(p - BC)(p - CA)}

直线与圆交点间距

问题重述

已知:

  • 圆心 O(x0,y0)O(x_0, y_0),半径 rr
  • 直线方程:ax+by+c=0ax + by + c = 0

要求:直线与圆的交点 ABA、B 的距离 AB|AB|


解题步骤

1. 圆心到直线的距离

d=ax0+by0+ca2+b2d = \frac{|a x_0 + b y_0 + c|}{\sqrt{a^2 + b^2}}

2. 分类讨论

  • d>rd > r :直线与圆相离,无交点,AB=0|AB| = 0
  • d=rd = r :直线与圆相切,只有一个交点,AB=0|AB| = 0
  • d<rd < r :直线与圆相交,有两个交点,此时
    AB=2r2d2|AB| = 2 \sqrt{r^2 - d^2}

公式总结

AB={0,dr2r2d2,d<r|AB| = \begin{cases} 0, & d \geq r \\[6pt] 2 \sqrt{r^2 - d^2}, & d < r \end{cases}

思路解释

圆心到直线的垂距为 dd
d<rd < r,直线与圆相交,过垂足的垂线将弦 ABAB 平分。
由勾股定理可得半弦长为 r2d2\sqrt{r^2 - d^2},所以弦长

AB=2r2d2|AB| = 2\sqrt{r^2 - d^2}

两直线交点

情况一:已知直线的一般式

两条直线:

  • L1:a1x+b1y+c1=0L_1: a_1 x + b_1 y + c_1 = 0
  • L2:a2x+b2y+c2=0L_2: a_2 x + b_2 y + c_2 = 0

1. 判定是否平行

设行列式:

D=a1b2a2b1D = a_1 b_2 - a_2 b_1
  • D=0D = 0,则两直线平行或重合,无唯一交点
  • D0D \neq 0,则一定有唯一交点

2. 交点公式

D0D \neq 0 时:

x=b1c2b2c1D,y=c1a2c2a1Dx = \frac{b_1 c_2 - b_2 c_1}{D}, \quad y = \frac{c_1 a_2 - c_2 a_1}{D}

情况二:已知直线上的两点

设:

  • L1L_1 经过点 P1(x1,y1)P_1(x_1, y_1)P2(x2,y2)P_2(x_2, y_2)
  • L2L_2 经过点 P3(x3,y3)P_3(x_3, y_3)P4(x4,y4)P_4(x_4, y_4)

1. 判定是否平行

构造行列式:

D=(x1x2)(y3y4)(y1y2)(x3x4)D = (x_1 - x_2)(y_3 - y_4) - (y_1 - y_2)(x_3 - x_4)
  • D=0D = 0,则两直线平行或重合,无唯一交点
  • D0D \neq 0,则一定有唯一交点

2. 交点公式

D0D \neq 0 时,交点 (x,y)(x, y) 为:

x=(x1y2y1x2)(x3x4)(x1x2)(x3y4y3x4)Dx = \frac{(x_1 y_2 - y_1 x_2)(x_3 - x_4) - (x_1 - x_2)(x_3 y_4 - y_3 x_4)}{D}
y=(x1y2y1x2)(y3y4)(y1y2)(x3y4y3x4)Dy = \frac{(x_1 y_2 - y_1 x_2)(y_3 - y_4) - (y_1 - y_2)(x_3 y_4 - y_3 x_4)}{D}

总结

  • 一般式直线:用行列式 D=a1b2a2b1D = a_1 b_2 - a_2 b_1 判断是否有唯一交点,交点用克拉默法则求解。
  • 两点式直线:先写出行列式 DD 判断是否平行,再用行列式公式求交点。

本质上,这两种方法都是在解一个 二元一次方程组,只不过输入形式不同。


叉乘(Cross Product)

叉乘的定义

叉乘是把两个三维向量 a\mathbf{a}b\mathbf{b} 变成一个新的向量 c\mathbf{c}

c=a×b\mathbf{c} = \mathbf{a} \times \mathbf{b}

特点:

  • 向量 c\mathbf{c} 垂直于 a\mathbf{a}b\mathbf{b} 所在的平面
  • 方向遵循 右手定则
  • 大小 = 由 a\mathbf{a}b\mathbf{b} 张成的 平行四边形面积

叉乘公式

a=(ax,ay,az),b=(bx,by,bz)\mathbf{a} = (a_x, a_y, a_z), \quad \mathbf{b} = (b_x, b_y, b_z)

a×b=(aybzazby,  azbxaxbz,  axbyaybx)\mathbf{a} \times \mathbf{b} = \big( a_y b_z - a_z b_y,\; a_z b_x - a_x b_z,\; a_x b_y - a_y b_x \big)

三个分量分别对应 xxyyzz 方向。


3️⃣ 具体算例

a=(1,2,3),b=(4,5,6)\mathbf{a} = (1,2,3), \quad \mathbf{b} = (4,5,6)

计算 x 分量:

cx=aybzazby=2635=3c_x = a_y b_z - a_z b_y = 2 \cdot 6 - 3 \cdot 5 = -3

计算 y 分量:

cy=azbxaxbz=3416=6c_y = a_z b_x - a_x b_z = 3 \cdot 4 - 1 \cdot 6 = 6

计算 z 分量:

cz=axbyaybx=1524=3c_z = a_x b_y - a_y b_x = 1 \cdot 5 - 2 \cdot 4 = -3

最终结果

a×b=(3,6,3)\mathbf{a} \times \mathbf{b} = (-3, 6, -3)

理解技巧

  • 想象平行四边形:a\mathbf{a}b\mathbf{b} 形成一个平行四边形,叉乘向量垂直于它。
  • 右手定则:右手四指从 a\mathbf{a} 指向 b\mathbf{b},大拇指指向的方向就是叉乘向量方向。
  • 每个分量都是“排除自己方向后的面积”:
    • xx 分量 = yz 平面的面积差
    • yy 分量 = zx 平面的面积差
    • zz 分量 = xy 平面的面积差