易错点

区域的投影端点没按投影方向定

求一片区域在直线 ll 上的投影,影子的两个端点由「沿 ll 方向的坐标」取到最大 / 最小的那两个点决定;随手挑「看着离得最远的两个顶点」往往挑错。

错在哪

区域 DD 在直线 ll 上的投影是一条线段,它的长度是

max⁡P∈D(OP⃗⋅d⃗) − min⁡P∈D(OP⃗⋅d⃗),d⃗ 是 l 的单位方向向量。\max_{P\in D} (\vec{OP}\cdot\vec d)\ -\ \min_{P\in D} (\vec{OP}\cdot\vec d), \qquad \vec d\ \text{是 } l\ \text{的单位方向向量。}

决定端点的是 OP⃗⋅d⃗\vec{OP}\cdot\vec d 这一个数,不是点与点之间的距离。 常见的两种错法:

  • 挑「最远的两个顶点」:三角形里最长的那条边,未必在 d⃗\vec d 方向上跨度最大。 边长 ∣PQ∣|PQ| 与投影跨度 ∣(OP⃗−OQ⃗)⋅d⃗∣=∣PQ∣cos⁡θ|(\vec{OP}-\vec{OQ})\cdot\vec d|=|PQ|\cos\theta 差一个 cos⁡θ\cos\theta, 短边如果更「顺着」ll,影子反而更长。
  • 只投影了一条边就收工:找到一条与 ll 平行的边,直接把它的长度当答案, 没有回头验其余顶点的投影是否落在这一段里。只要有一个顶点投到了外面,影子就更长。

正确做法

  1. 把 ll 的方向向量写出来并单位化:l:ax+by+c=0l:ax+by+c=0 的方向是 (b,−a)(b,-a)。
  2. 令 u=OP⃗⋅d⃗u=\vec{OP}\cdot\vec d,这是一个线性函数,在多边形区域上的最值必在顶点取到。
  3. 逐个顶点算 uu,取最大与最小,两者之差就是影子的长度。
  4. 若走「认平行边」的近路,必须补一句:其余顶点的投影都落在这条边的投影之内。

怎么避免

  • 先问一句「谁在 ll 的方向上跑得最远」,而不是「谁离谁最远」。
  • 顶点全算一遍 uu 只要几秒,比事后返工便宜。
  • 画图时把 ll 的方向画成一根箭头,顶点沿箭头方向排个序——端点一眼可见。

学它之前先会

共 2 条前置、最深 2 层。

共 1 道题考到本条。