计算几何基础笔记
二维向量几何与半平面交 · 完整知识清单
第一部分:基本对象与标量性质
- 点:\(A(x_1, y_1)\),表示空间中的位置。
- 向量:\(\vec{a} = (x_1, y_1)\),表示位移或有向线段。
- 核心性质:\(x_1\) 和 \(y_1\) 均为标量(实数)。无论是点的坐标还是向量的分量,它们都遵循普通的加减乘除运算。
第二部分:点与向量的基本运算(含运算数类型与结果类型)
2.1 点与点相减(得向量)
- 运算数类型:
点-点 - 结果类型:
向量 - 运算法则:起点 \(A(x_1, y_1)\),终点 \(B(x_2, y_2)\),对应坐标相减:\[\vec{AB} = B - A = (x_2 - x_1,\ y_2 - y_1) \]
- 顺序性:\(\vec{AB} = -\vec{BA}\)(反交换)。
2.2 点与向量相加(得新点)
- 运算数类型:
点+向量 - 结果类型:
点 - 运算法则:点 \(P(x, y)\) 沿向量 \(\vec{v} = (m, n)\) 平移:\[P + \vec{v} = (x + m,\ y + n) \]
- 注:点加点是未定义操作,向量加向量仍是向量。
2.3 向量的模长
- 运算数类型:
向量 - 结果类型:
标量(实数) - 运算法则:\[|\vec{a}| = \sqrt{x_1^2 + y_1^2} \]
2.4 向量的数乘(标量乘法)
- 运算数类型:
标量(实数)×向量 - 结果类型:
向量 - 运算法则:实数 \(k\) 与向量 \(\vec{a} = (x, y)\) 相乘:\[k \cdot \vec{a} = (k \cdot x,\ k \cdot y) \]
- 几何意义:\(|k| > 1\) 拉伸,\(0 < |k| < 1\) 压缩,\(k < 0\) 反向。
- 与点乘的区别:数乘是标量 × 向量 → 向量;点乘是向量 · 向量 → 标量。
2.5 向量加法与减法
- 运算数类型:
向量±向量 - 结果类型:
向量 - 运算法则:
- 加法:\(\vec{a} + \vec{b} = (x_1 + x_2,\ y_1 + y_2)\)(平行四边形法则)
- 减法:\(\vec{a} - \vec{b} = (x_1 - x_2,\ y_1 - y_2)\)
第三部分:二维向量乘法(点积与叉积)(含运算数类型与结果类型)
3.1 点积(内积)—— 判定"方向是否一致"
- 运算数类型:
向量·向量 - 结果类型:
标量(实数) - 代数定义:设 \(\vec{a} = (x_1, y_1)\),\(\vec{b} = (x_2, y_2)\):\[\vec{a} \cdot \vec{b} = x_1 x_2 + y_1 y_2 \]
- 几何定义:\[\vec{a} \cdot \vec{b} = |\vec{a}| \cdot |\vec{b}| \cdot \cos\theta \](\(\theta\) 为两向量夹角)
- 符号几何意义:
- \(> 0\):夹角为锐角(方向大体一致,投影同向)。
- \(= 0\):夹角为直角(两向量垂直)。
- \(< 0\):夹角为钝角(方向大体相反,投影反向)。
- 运算定律:
- 交换律:\(\vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a}\)
- 分配律:\(\vec{a} \cdot (\vec{b} + \vec{c}) = \vec{a} \cdot \vec{b} + \vec{a} \cdot \vec{c}\)
- 数乘结合律:\((k\vec{a}) \cdot \vec{b} = k(\vec{a} \cdot \vec{b})\)
3.2 二维叉积(外积)—— 判定"旋转方向"与"面积"
- 运算数类型:
向量×向量 - 结果类型:
标量(实数) - 代数定义:设 \(\vec{a} = (x_1, y_1)\),\(\vec{b} = (x_2, y_2)\):\[\vec{a} \times \vec{b} = x_1 y_2 - y_1 x_2 \]注:此处的乘法如 \(x_1 \cdot y_2\) 代表普通标量乘法。
- 几何定义:\[\vec{a} \times \vec{b} = |\vec{a}| \cdot |\vec{b}| \cdot \sin\theta \](\(\theta\) 为从 \(\vec{a}\) 转向 \(\vec{b}\) 的有向夹角)
- 核心几何意义:
- 绝对值:\(|\vec{a} \times \vec{b}|\) 等于以 \(\vec{a}\)、\(\vec{b}\) 为邻边的平行四边形面积。
推导依据:高 \(h = |\vec{b}|\sin\theta\),面积 \(S = |\vec{a}| \cdot h\)。 - 符号(方向判定):
- \(> 0\):\(\vec{b}\) 在 \(\vec{a}\) 的逆时针方向(即左侧)(\(0 < \theta < \pi\))。
- \(< 0\):\(\vec{b}\) 在 \(\vec{a}\) 的顺时针方向(即右侧)(\(\sin\theta < 0\),即 \(\pi < \theta < 2\pi\))。
- \(= 0\):两向量共线(平行)(\(\theta = 0\) 或 \(\theta = \pi\))。
- 绝对值:\(|\vec{a} \times \vec{b}|\) 等于以 \(\vec{a}\)、\(\vec{b}\) 为邻边的平行四边形面积。
- 运算定律:
- 反交换律:\[\vec{a} \times \vec{b} = -(\vec{b} \times \vec{a}) \]
- 数乘结合律:\[(k\vec{a}) \times \vec{b} = k(\vec{a} \times \vec{b}) \]
- 零向量(自叉积):\[\vec{a} \times \vec{a} = 0 \]
- 反交换律:
- 核心恒等式证明(代数 \(\Leftrightarrow\) 几何):
设 \(\vec{a} = (|a|\cos\alpha, |a|\sin\alpha)\),\(\vec{b} = (|b|\cos\beta, |b|\sin\beta)\),其中 \(\theta = \beta - \alpha\),则:\[\begin{aligned} x_1 y_2 - x_2 y_1 &= |a||b|(\cos\alpha\sin\beta - \sin\alpha\cos\beta) \\ &= |a||b|\sin(\beta - \alpha) \\ &= |a||b|\sin\theta \end{aligned} \]
第四部分:直线的法向量与方向向量(含严格证明)
| 概念 | 定义 | 二维求法(互转) | 判定依据 |
|---|---|---|---|
| 方向向量 \(\vec{v}\) | 与直线平行的非零向量 | 若已知法向量 \(\vec{n}=(A,B)\),则 \(\vec{v}=(B,-A)\) | 共线(叉积为 0) |
| 法向量 \(\vec{n}\) | 与直线垂直的非零向量 | 若已知方向向量 \(\vec{v}=(m,n)\),则 \(\vec{n}=(-n,m)\) | 垂直(点积为 0) |
- 方向向量不唯一:若 \(\vec{v}\) 是方向向量,则 \(k\vec{v}\)(\(k \neq 0\))也是,反向也算平行。
本部分关键结论:对于直线 \(Ax+By+C=0\),其法向量为 \(\vec{n}=(A,B)\),方向向量为 \(\vec{v}=(B,-A)\)。下面给出严格证明。
4.1 证明:\(\vec{n} = (A, B)\) 是直线 \(Ax+By+C=0\) 的法向量
证明:
- 在直线上任取两个不同的点 \(P_1(x_1, y_1)\) 和 \(P_2(x_2, y_2)\)。
- 因为两点都在直线上,所以它们满足直线方程:\[Ax_1 + By_1 + C = 0 \tag{1} \]\[Ax_2 + By_2 + C = 0 \tag{2} \]
- 用 (2) 式减去 (1) 式,得到:\[A(x_2 - x_1) + B(y_2 - y_1) = 0 \]
- 观察上式左边,它正好是向量 \((A, B)\) 与向量 \((x_2 - x_1,\ y_2 - y_1)\) 的点积:\[(A, B) \cdot (x_2 - x_1,\ y_2 - y_1) = 0 \]
- 根据你的知识清单第三部分 3.1(点积符号几何意义),两个非零向量的点积为 0,说明它们互相垂直。
- 而 \((x_2 - x_1,\ y_2 - y_1) = \overrightarrow{P_1P_2}\) 正是直线的方向向量(由两点相减得到)。
- 因此,\((A, B)\) 垂直于直线的方向向量,即垂直于直线本身。由法向量定义可知,\(\vec{n} = (A, B)\) 是直线的法向量。\(\square\)
4.2 证明:\(\vec{v} = (B, -A)\) 是直线 \(Ax+By+C=0\) 的方向向量
证明(利用已证明的 4.1):
- 由 4.1 已知 \(\vec{n} = (A, B)\) 是直线的法向量。
- 计算 \(\vec{n}\) 与 \(\vec{v} = (B, -A)\) 的点积:\[\vec{n} \cdot \vec{v} = A \cdot B + B \cdot (-A) = AB - AB = 0 \]
- 由于 \(\vec{n}\) 与 \(\vec{v}\) 的点积为 0,说明 \(\vec{v}\) 与法向量 \(\vec{n}\) 互相垂直。
- 在二维平面中,垂直于法向量的非零向量,必然与直线平行(或落在直线上)。
- 因此,\(\vec{v} = (B, -A)\) 是直线的方向向量。\(\square\)
第五部分:直线表示方法(解析法与向量法)
5.1 向量法(通用,无死角)
| 方法 | 公式 | 核心要素 |
|---|---|---|
| 参数式(点向式) | \(P(t) = p + t \cdot \vec{v}\) | \(p\) 为定点,\(\vec{v}\) 为方向向量,\(t \in \mathbb{R}\) |
| 两点式(向量形式) | \(P(t) = P_1 + t \cdot (P_2 - P_1)\) | 由直线上两点 \(P_1, P_2\) 确定 |
| 点法式 | \(\vec{n} \cdot (P - P_0) = 0\) | \(\vec{n}\) 为法向量,利用垂直(点积为 0) |
5.2 解析法(依赖斜率,有盲区)
| 方法 | 公式 | 局限性 |
|---|---|---|
| 点斜式 | \(y - y_0 = k(x - x_0)\) | 不能表示竖直线(\(k\) 不存在) |
| 斜截式 | \(y = kx + b\) | 不能表示竖直线 |
| 两点式 | \(\frac{y - y_1}{y_2 - y_1} = \frac{x - x_1}{x_2 - x_1}\) | 分母不能为 0 |
| 截距式 | \(\frac{x}{a} + \frac{y}{b} = 1\) | 不能表示过原点或平行于轴的直线 |
5.3 终极通用式(一般式)
- 从一般式直接读取:
- 法向量:\(\vec{n} = (A, B)\)
- 方向向量:\(\vec{v} = (B, -A)\) 或 \((-B, A)\)
- 斜率:\(k = -\frac{A}{B}\)(当 \(B \neq 0\) 时)
第六部分:直线与线段求交点(全面覆盖所有表示法)
6.1 一般式 \(L_1: A_1x+B_1y+C_1=0\),\(L_2: A_2x+B_2y+C_2=0\)
解法(克莱姆法则):
令行列式:
- 若 \(D = 0\):两直线平行或重合(无唯一交点)。
- 若 \(D \neq 0\):唯一交点坐标为:\[x = \frac{B_1C_2 - B_2C_1}{D}, \qquad y = \frac{A_2C_1 - A_1C_2}{D} \]
6.2 参数式(点向式)\(L_1: P = P_1 + t\vec{v}_1\),\(L_2: P = P_2 + s\vec{v}_2\)
解法(叉积法):
令 \(\vec{v}_1 = (v_{1x}, v_{1y})\),\(\vec{v}_2 = (v_{2x}, v_{2y})\)。
若 \(\vec{v}_1 \times \vec{v}_2 = 0\),则两直线平行或重合。
否则,参数 \(t\) 为:
将 \(t\) 代入 \(L_1\) 即得交点:\(P = P_1 + t\vec{v}_1\)。
本质推导:令 \(P_1 + t\vec{v}_1 = P_2 + s\vec{v}_2\),移项后两边同时叉乘 \(\vec{v}_2\) 消去 \(s\),即得公式。
6.3 斜截式 \(L_1: y = k_1x + b_1\),\(L_2: y = k_2x + b_2\)
解法(解析法):
- 若 \(k_1 = k_2\),则平行或重合。
- 否则:\[x = \frac{b_2 - b_1}{k_1 - k_2}, \qquad y = k_1x + b_1 \]
6.4 点斜式 \(y - y_{01} = k_1(x - x_{01})\) 与 \(y - y_{02} = k_2(x - x_{02})\)
解法:将点斜式展开为斜截式 \(y = k_1x + (y_{01} - k_1x_{01})\),代入 6.3 公式求解。
6.5 截距式 \(\frac{x}{a_1} + \frac{y}{b_1} = 1\) 与 \(\frac{x}{a_2} + \frac{y}{b_2} = 1\)
解法:化为一般式 \(b_1x + a_1y - a_1b_1 = 0\),代入 6.1 公式求解。
6.6 混合形式(如一般式与参数式)
解法(代入法):
将参数式 \(P(t) = (x_0 + tv_x,\ y_0 + tv_y)\) 代入一般式 \(Ax + By + C = 0\):
解出 \(t\):
(若分母为 0,则直线平行或直线含于半平面)
代入参数式即得交点。
6.7 线段与线段相交判定与求交点
第一步(快速排斥):两线段的外接矩形必须相交,否则必不相交。
第二步(跨立实验):线段 \(AB\) 与 \(CD\) 相交的充要条件是 \(A,B\) 分别位于 \(CD\) 两侧,且 \(C,D\) 分别位于 \(AB\) 两侧:
且:
(包含端点接触,若严格相交则取 \(<\))
第三步(求交点):若判定相交,则将其视为两条直线(参数式 \(L_1: A + t(B-A)\),\(L_2: C + s(D-C)\)),代入 6.2 公式求得交点,此时 \(t, s \in [0, 1]\) 自动满足。
第七部分:半平面与向量判定的桥梁
本部分严格证明三个核心结论:法向量指向正半平面、左侧等价于正半平面,以及法向量与方向向量的相对方位。这些结论是半平面交算法将“代数不等式”转化为“几何左右判定”的理论基石。
7.1 法向量指向正半平面(严格证明)
定理:对于直线 \(L: Ax+By+C=0\),其法向量 \(\vec{n} = (A, B)\) 精确地指向满足 \(Ax+By+C > 0\) 的一侧(称为正半平面)。
证明:
-
取基准点:在直线 \(L\) 上任取一点 \(P_0(x_0, y_0)\)。由于 \(P_0\) 在直线上,满足:
\[Ax_0 + By_0 + C = 0 \quad \Longrightarrow \quad C = -(Ax_0 + By_0) \] -
考察任意点:对于平面内任意一点 \(P(x, y)\),考虑从 \(P_0\) 指向 \(P\) 的向量 \(\overrightarrow{P_0P} = (x - x_0,\ y - y_0)\)。
-
计算法向量与方向向量的点积:
\[\vec{n} \cdot \overrightarrow{P_0P} = A(x - x_0) + B(y - y_0) = Ax + By - (Ax_0 + By_0) \] -
代入 \(C\) 的关系:将第 1 步的 \(C = -(Ax_0 + By_0)\) 代入上式,得到:
\[\vec{n} \cdot \overrightarrow{P_0P} = Ax + By + C \] -
结合点积的几何意义(知识清单 3.1):
- 若 \(Ax + By + C > 0\),则 \(\vec{n} \cdot \overrightarrow{P_0P} > 0\),即 \(\vec{n}\) 与 \(\overrightarrow{P_0P}\) 的夹角为锐角。这说明 \(P\) 位于 \(\vec{n}\) 所指的前方一侧。
- 若 \(Ax + By + C < 0\),则夹角为钝角,说明 \(P\) 位于 \(\vec{n}\) 所指的反方向一侧。
- 若 \(Ax + By + C = 0\),则 \(P\) 恰好在直线 \(L\) 上。
结论:法向量 \(\vec{n} = (A, B)\) 永远指向满足不等式 \(>0\) 的正半平面。\(\square\)
7.2 左半平面与正半平面的统一关系(核心桥梁)
定理:对于直线 \(L: Ax+By+C=0\),取方向向量 \(\vec{v} = (B, -A)\)(即第 4.2 节证明的方向向量),直线上任取一点 \(P_0\)。则对于平面上任意一点 \(Q\),以下两个命题完全等价:
证明:
-
计算叉积:设 \(P_0 = (x_0, y_0)\),\(Q = (x, y)\),则:
\[\vec{v} \times (Q - P_0) = B(y - y_0) - (-A)(x - x_0) = Ax + By - (Ax_0 + By_0) \] -
代入 \(C\) 的关系:由 7.1 节已知 \(C = -(Ax_0 + By_0)\),因此:
\[\vec{v} \times (Q - P_0) = Ax + By + C \] -
根据叉积符号的几何意义(知识清单 3.2):
- 若 \(\vec{v} \times (Q - P_0) > 0\),则 \(Q\) 在 \(\vec{v}\) 的左侧,同时对应 \(Ax + By + C > 0\)(正半平面)。
- 若 \(\vec{v} \times (Q - P_0) < 0\),则 \(Q\) 在 \(\vec{v}\) 的右侧,同时对应 \(Ax + By + C < 0\)(负半平面)。
- 若等式为 0,则 \(Q\) 在直线上。
结论:通过选取方向向量为 \((B, -A)\),“点在方向向量左侧” 与 “点满足原始不等式” 完全等价。这使得算法在代码中只需单纯维护“左侧”即可,无需额外计算法向量方向。\(\square\)
7.3 法向量与方向向量的方位关系(直观验证)
为了验证 7.2 节中方向向量取 \((B, -A)\) 的合理性,本小节确认法向量确实位于方向向量的左侧。
命题:方向向量 \(\vec{v} = (B, -A)\) 的左侧,恰好是法向量 \(\vec{n} = (A, B)\) 所指的方向。
证明:计算 \(\vec{v}\) 与 \(\vec{n}\) 的叉积:
由于 \(A\) 和 \(B\) 不同时为 0,故 \(A^2 + B^2 > 0\)。
根据叉积符号规则(知识清单 3.2),叉积为正表示 \(\vec{n}\) 在 \(\vec{v}\) 的逆时针方向,即左侧。\(\square\)

浙公网安备 33010602011771号