计算几何

1. 向量

对于向量的深入理解以及几何意义,可以看 3b1b 的视频,这里只是简单的记录。

1.1. 定义

  • 向量

\qquad 既有大小又有方向的量叫做向量。在物理上,它通常表示为空间上的箭头,决定向量的是它的长度和\qquad 方向,可以在空间中自由移动。而在计算机上,通常可以表示成有序列表的形式,也就是矩阵。而在\qquad 数学领域中,向量可以是任何东西,只要其相加与数乘有意义即可。记作 a→\overrightarrow{a} 或 a\mathbf a。

  • 有向线段

\qquad 带有方向的线段。有向线段有三要素:起点、方向、长度,知道这三点就可以确定唯一的终点。若起\qquad 点为 AA,终点为 BB,则可以表示为 AB→\overrightarrow{AB}。我们一般用有向线段表示向量。

\qquad 因为在坐标系中,向量的起点一般都是原点,因此我们可以直接用终点表示向量。记作 (x,y)(x,y)。

  • 模长

\qquad 有向线段 AB‾\overline{AB} 的长度为向量的模长,即为这个向量的大小。记为 ∣AB→∣|\overrightarrow{AB}| 或 ∣a∣|\mathbf a|。

  • 单位向量

\qquad 模为 11 的向量称为该方向上的单位向量。

1.2. 运算

  • 加减法

\qquad 对于两个变量 α=(x1,y1),β=(x2,y2)\alpha=(x_1,y_1),\beta=(x_2,y_2),定义

α+β=(x1+x2,y1+y2),α−β=(x1−x2,y1−y2)\alpha+\beta=(x_1+x_2,y_1+y_2),\alpha-\beta=(x_1-x_2,y_1-y_2)

  • 数乘

\qquad 对于向量 α=(x,y)\alpha = (x,y) 和一个实数 λ≠0\lambda\ne 0,定义

λα=(λx,λy)\lambda \alpha = (\lambda x,\lambda y)

  • 点积

\qquad 对于两个向量 α=(x1,y1)\alpha = (x_1,y_1) 和 β=(x2,y2)\beta = (x_2,y_2),它们的点积定义为

α⋅β=x1x2+y1y2\alpha \cdot \beta = x_1x_2+y_1y_2

\qquad 向量 α,β\alpha,\beta 的点积还满足

α⋅β=∣α∣∣β∣cos⁡θ\alpha \cdot \beta = |\alpha||\beta| \cos \theta

\qquad 其中 θ\theta 为 α\alpha 逆时针旋转到 β\beta 形成的角。

\qquad 这意味着点积的几何意义为一个向量在另一个向量上的投影长度乘以另一个向量的模长。若一个向量\qquad 在另一个向量上的投影方向与另一个向量的方向相反,则点积为负(这等价于两个向量所夹的角大于\qquad 9090 度)。

  • 叉积

\qquad 对于两个向量 α=(x1,y1)\alpha = (x_1,y_1) 和 β=(x2,y2)\beta = (x_2,y_2),它们的叉积定义为

α⋅β=x1y2+x2y1\alpha \cdot \beta = x_1y_2+x_2y_1

\qquad实际上叉积的几何意义就是两个向量张成的平行四边形的面积,而这点就可以用线性变换和行列式来理\qquad解。

\qquad因此向量的叉积还满足

α⋅β=∣α∣∣β∣sin⁡θ\alpha \cdot \beta = |\alpha||\beta| \sin \theta

\qquad其中 θ\theta 为一个向量逆时针旋转到另一个向量的方向形成的角。

\qquad另外可以通过单位向量的位置来记住正负的变换。

1.3. 运用

判断向量的相对位置

要求:

给出三个点 p0,p1,p2p_0,p_1,p_2,问向量 p0p1→,p0p2→\overrightarrow{p_0p_1},\overrightarrow{p_0p_2} 属于下面哪种位置关系。

做法:

根据叉积和点积即可判断。

通过叉积可以判断(1)和(2):正为(1),负为(2),为 00 的话是剩下三个。

通过点积可以判断(3):为负的话为(3)。剩下的靠长度判断。

1.4. 例题

P6160 [Cnoi2020]向量

题意:

有三个向量 ∣a→∣=r1,∣b→∣=r2,∣c→∣=r3|\overrightarrow{a}|=r_1,|\overrightarrow{b}|=r_2,|\overrightarrow{c}|=r_3,求 min⁡{a→⋅b→+b→⋅c→+c→⋅a→}\min\{\overrightarrow{a}\cdot \overrightarrow{b}+\overrightarrow{b}\cdot \overrightarrow{c}+\overrightarrow{c}\cdot \overrightarrow{a}\}。

思路:

根据式子

a→⋅b→+b→⋅c→+c→⋅a→\overrightarrow{a}\cdot \overrightarrow{b}+\overrightarrow{b}\cdot \overrightarrow{c}+\overrightarrow{c}\cdot \overrightarrow{a}

=12(∣a→+b→+c→∣2−∣a→∣2−∣b→∣2−∣c→∣2)=\frac{1}{2}(|\overrightarrow{a}+\overrightarrow{b}+\overrightarrow{c}|^2-|\overrightarrow{a}|^2-|\overrightarrow{b}|^2-|\overrightarrow{c}|^2)

r1,r2,r3r_1,r_2,r_3 是定值,那么只要求 ∣a→+b→+c→∣2|\overrightarrow{a}+\overrightarrow{b}+\overrightarrow{c}|^2 的最小值即可。

然后分类讨论。令 r1≤r2≤r3r_1\leq r_2\leq r_3。若 r1+r2>r3r_1+r_2>r_3,那么可以围成三角形,最小值为 00;否则的话最小值为 r3−r2−r1r_3-r_2-r_1。

2. 三角函数

2.1. 弧度制

注意 c++ 中的关于三角函数的库函数都是弧度制。

转换公式如下(rad⁡\operatorname{rad} 为弧度单位)

1。=πrad⁡180。,1rad⁡=180。π1^。=\frac{\pi \operatorname{rad}}{180^。},1 \operatorname{rad}=\frac{180^。}{\pi}

下面弧度都不带单位。