计算几何基础笔记

二维向量几何与半平面交 · 完整知识清单


第一部分:基本对象与标量性质

  • \(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{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\) 的法向量

证明

  1. 在直线上任取两个不同的点 \(P_1(x_1, y_1)\)\(P_2(x_2, y_2)\)
  2. 因为两点都在直线上,所以它们满足直线方程:

    \[Ax_1 + By_1 + C = 0 \tag{1} \]

    \[Ax_2 + By_2 + C = 0 \tag{2} \]

  3. 用 (2) 式减去 (1) 式,得到:

    \[A(x_2 - x_1) + B(y_2 - y_1) = 0 \]

  4. 观察上式左边,它正好是向量 \((A, B)\) 与向量 \((x_2 - x_1,\ y_2 - y_1)\)点积

    \[(A, B) \cdot (x_2 - x_1,\ y_2 - y_1) = 0 \]

  5. 根据你的知识清单第三部分 3.1(点积符号几何意义),两个非零向量的点积为 0,说明它们互相垂直
  6. \((x_2 - x_1,\ y_2 - y_1) = \overrightarrow{P_1P_2}\) 正是直线的方向向量(由两点相减得到)。
  7. 因此,\((A, B)\) 垂直于直线的方向向量,即垂直于直线本身。由法向量定义可知,\(\vec{n} = (A, B)\) 是直线的法向量\(\square\)

4.2 证明:\(\vec{v} = (B, -A)\) 是直线 \(Ax+By+C=0\) 的方向向量

证明(利用已证明的 4.1):

  1. 由 4.1 已知 \(\vec{n} = (A, B)\) 是直线的法向量。
  2. 计算 \(\vec{n}\)\(\vec{v} = (B, -A)\) 的点积:

    \[\vec{n} \cdot \vec{v} = A \cdot B + B \cdot (-A) = AB - AB = 0 \]

  3. 由于 \(\vec{n}\)\(\vec{v}\) 的点积为 0,说明 \(\vec{v}\) 与法向量 \(\vec{n}\) 互相垂直
  4. 在二维平面中,垂直于法向量的非零向量,必然与直线平行(或落在直线上)。
  5. 因此,\(\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 终极通用式(一般式)

\[Ax + By + C = 0 \quad (A, B \text{ 不同时为 } 0) \]

  • 从一般式直接读取
    • 法向量:\(\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 = A_1B_2 - A_2B_1 \]

  • \(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 = \frac{(P_2 - P_1) \times \vec{v}_2}{\vec{v}_1 \times \vec{v}_2} \]

\(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\)

\[A(x_0 + tv_x) + B(y_0 + tv_y) + C = 0 \]

解出 \(t\)

\[t = -\frac{Ax_0 + By_0 + C}{Av_x + Bv_y} \]

(若分母为 0,则直线平行或直线含于半平面)

代入参数式即得交点。

6.7 线段与线段相交判定与求交点

第一步(快速排斥):两线段的外接矩形必须相交,否则必不相交。

第二步(跨立实验):线段 \(AB\)\(CD\) 相交的充要条件是 \(A,B\) 分别位于 \(CD\) 两侧,且 \(C,D\) 分别位于 \(AB\) 两侧:

\[((C - A) \times (B - A)) \cdot ((D - A) \times (B - A)) \le 0 \]

且:

\[((A - C) \times (D - C)) \cdot ((B - C) \times (D - C)) \le 0 \]

(包含端点接触,若严格相交则取 \(<\)

第三步(求交点):若判定相交,则将其视为两条直线(参数式 \(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\) 的一侧(称为正半平面)。

证明

  1. 取基准点:在直线 \(L\) 上任取一点 \(P_0(x_0, y_0)\)。由于 \(P_0\) 在直线上,满足:

    \[Ax_0 + By_0 + C = 0 \quad \Longrightarrow \quad C = -(Ax_0 + By_0) \]

  2. 考察任意点:对于平面内任意一点 \(P(x, y)\),考虑从 \(P_0\) 指向 \(P\) 的向量 \(\overrightarrow{P_0P} = (x - x_0,\ y - y_0)\)

  3. 计算法向量与方向向量的点积

    \[\vec{n} \cdot \overrightarrow{P_0P} = A(x - x_0) + B(y - y_0) = Ax + By - (Ax_0 + By_0) \]

  4. 代入 \(C\) 的关系:将第 1 步的 \(C = -(Ax_0 + By_0)\) 代入上式,得到:

    \[\vec{n} \cdot \overrightarrow{P_0P} = Ax + By + C \]

  5. 结合点积的几何意义(知识清单 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\),以下两个命题完全等价:

\[\boxed{Q \text{ 在 } \vec{v} \text{ 的左侧}} \quad \Longleftrightarrow \quad \boxed{Q \text{ 在正半平面 } (Ax+By+C > 0)} \]

证明

  1. 计算叉积:设 \(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) \]

  2. 代入 \(C\) 的关系:由 7.1 节已知 \(C = -(Ax_0 + By_0)\),因此:

    \[\vec{v} \times (Q - P_0) = Ax + By + C \]

  3. 根据叉积符号的几何意义(知识清单 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}\) 的叉积:

\[\vec{v} \times \vec{n} = B \cdot B - (-A) \cdot A = A^2 + B^2 \]

由于 \(A\)\(B\) 不同时为 0,故 \(A^2 + B^2 > 0\)

根据叉积符号规则(知识清单 3.2),叉积为正表示 \(\vec{n}\)\(\vec{v}\)逆时针方向,即左侧\(\square\)

posted @ 2026-07-10 20:56  H_Fx  阅读(53)  评论(0)    收藏  举报