计算几何初步
基本公式
正弦定理
a sin A = b sin B = c sin C = 2 R \dfrac a{\sin A}=\dfrac b{\sin B}=\dfrac c{\sin C}=2R sinAa=sinBb=sinCc=2R
余弦定理
a 2 = b 2 + c 2 − 2 b c cos A b 2 = a 2 + c 2 − 2 a c cos B c 2 = a 2 + b 2 + 2 a b cos C a^2=b^2+c^2-2bc\cos A\\ b^2=a^2+c^2-2ac\cos B\\ c^2=a^2+b^2+2ab\cos C a2=b2+c2−2bccosAb2=a2+c2−2accosBc2=a2+b2+2abcosC
向量
基本概念
向量的模:有向线段 A B → \overrightarrow{AB} AB长度,记为 ∣ A B → ∣ |\overrightarrow{AB}| ∣AB∣或 ∣ a ∣ |\boldsymbol a| ∣a∣。
向量的夹角:有向量 a , b \boldsymbol a,\boldsymbol b a,b,作 O A → = a \overrightarrow{OA}=\boldsymbol a OA=a, O B → = b \overrightarrow{OB}=\boldsymbol b OB=b。 θ \theta θ为向量 a \boldsymbol a a与向量 b \boldsymbol b b的夹角,记作 ⟨ a , b ⟩ \lang\boldsymbol a,\boldsymbol b\rang ⟨a,b⟩。根据概念可得:若 θ = 0 \theta=0 θ=0,则两向量同向;若 θ = π 2 \theta=\dfrac{\pi}{2} θ=2π,则两向量垂直, a ⊥ b \boldsymbol a\perp\boldsymbol b a⊥b;若 θ = π \theta=\pi θ=π,则两向量反向。
运算
加减法
有向量 P = ( x 1 , y 1 ) , Q = ( x 2 , y 2 ) P=(x_1,y_1),Q=(x_2,y_2) P=(x1,y1),Q=(x2,y2)。
P + Q = ( x 1 + x 2 , y 1 + y 2 ) P+Q=(x_1+x_2,y_1+y_2) P+Q=(x1+x2,y1+y2)
P − Q = ( x 1 − x 2 , y 1 − y 2 ) P-Q=(x_1-x_2,y_1-y_2) P−Q=(x1−x2,y1−y2)
显然有, P + Q = Q + P , P − Q = − ( Q − P ) P+Q=Q+P,P-Q=-(Q-P) P+Q=Q+P,P−Q=−(Q−P)
点积
A B → ⋅ C D → = x 1 x 2 + y 1 y 2 \overrightarrow{AB}\cdot\overrightarrow{CD}=x_1x_2+y_1y_2 AB⋅CD=x1x2+y1y2
A B → ⋅ C D → = ∣ A B ∣ ∣ C D ∣ cos θ \overrightarrow{AB}\cdot\overrightarrow{CD}=|AB||CD|\cos\theta AB⋅CD=∣AB∣∣CD∣cosθ
叉乘
A B → × C D → = x 1 y 2 − x 2 y 1 \overrightarrow{AB}\times\overrightarrow{CD}=x_1y_2-x_2y_1 AB×CD=x1y2−x2y1
A B → × C D → = ∣ A B ∣ ∣ C D ∣ sin θ \overrightarrow{AB}\times\overrightarrow{CD}=|AB||CD|\sin\theta AB×CD=∣AB∣∣CD∣sinθ
旋转
逆时针旋转: ( x cos θ − y sin θ , x sin θ − y cos θ ) (x\cos\theta-y\sin\theta,x\sin\theta-y\cos\theta) (xcosθ−ysinθ,xsinθ−ycosθ)
应用
多边形的面积:将多边形上的点逆时针标记为
p
1
…
p
n
p_1…p_n
p1…pn,任选辅助点
O
O
O,记向量
v
i
=
p
i
−
O
v_i=p_i-O
vi=pi−O,得:
S
=
1
2
∣
∑
i
=
1
n
v
i
×
v
i
m
o
d
n
+
1
∣
S=\dfrac12|\sum^n_{i=1}v_i\times v_i\bmod_{n+1}|
S=21∣i=1∑nvi×vimodn+1∣
三个距离
欧式距离
有点
A
(
x
1
,
y
1
)
,
B
(
x
2
,
y
2
)
A(x_1,y_1),B(x_2,y_2)
A(x1,y1),B(x2,y2),则两点的欧氏距离为:
∣
A
B
∣
=
(
x
1
−
x
2
)
2
+
(
y
1
−
y
2
)
2
|AB|=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}
∣AB∣=(x1−x2)2+(y1−y2)2
n
n
n维空间中的欧式距离公式:
A
→
=
(
x
1
,
1
…
x
1
,
n
)
,
B
→
=
(
x
2
,
1
…
x
2
,
n
)
\overrightarrow A=(x_{1,1}…x_{1,n}),\overrightarrow B=(x_{2,1}…x_{2,n})
A=(x1,1…x1,n),B=(x2,1…x2,n)
∣
A
B
→
∣
=
∑
i
=
1
n
(
x
1
,
i
−
x
2
,
i
)
2
|\overrightarrow{AB}|=\sqrt{\sum^n_{i=1}(x_{1,i}-x_{2,i})^2}
∣AB∣=i=1∑n(x1,i−x2,i)2
曼哈顿距离
对于两点
A
(
x
1
,
y
1
)
,
B
(
x
2
,
y
2
)
A(x_1,y_1),B(x_2,y_2)
A(x1,y1),B(x2,y2),其曼哈顿距离为:
d
(
A
,
B
)
=
∣
x
1
−
x
2
∣
+
∣
y
1
−
y
2
∣
d(A,B)=|x_1-x_2|+|y_1-y_2|
d(A,B)=∣x1−x2∣+∣y1−y2∣
相关性质:
-
d ( i , j ) ≥ 0 d(i,j)\ge0 d(i,j)≥0
-
d ( i , i ) = 0 d(i,i)=0 d(i,i)=0
-
d ( i , j ) = d ( j , i ) d(i,j)=d(j,i) d(i,j)=d(j,i)
-
d ( i , j ) ≤ d ( i , k ) + d ( k , j ) d(i,j)\le d(i,k)+d(k,j) d(i,j)≤d(i,k)+d(k,j)
切比雪夫距离
有点
A
(
x
1
,
y
1
)
,
B
(
x
2
,
y
2
)
A(x_1,y_1),B(x_2,y_2)
A(x1,y1),B(x2,y2),其切比雪夫距离为:
d
(
A
,
B
)
=
m
a
x
(
∣
x
1
−
x
2
∣
,
∣
y
1
−
y
2
∣
)
d(A,B)=max(|x_1-x_2|,|y_1-y_2|)
d(A,B)=max(∣x1−x2∣,∣y1−y2∣)
应用
切比雪夫距离与曼哈顿距离转换
点 ( x , y ) (x,y) (x,y)的坐标变为 ( x + y , x − y ) (x+y,x-y) (x+y,x−y)时,原坐标系中曼哈顿距离等于新坐标系中的切比雪夫距离。
点 ( x , y ) (x,y) (x,y)的坐标变为 ( x + y 2 , x − y 2 ) (\dfrac{x+y}2,\dfrac{x-y}2) (2x+y,2x−y),原坐标系中的切比雪夫距离等于新坐标系中的曼哈顿距离。
判断
判断点是否在线段上
点 Q Q Q,线段 P 1 P 2 P_1P_2 P1P2。
-
( Q − P 1 ) × ( P 2 − P 1 ) = 0 (Q-P_1)\times(P_2-P_1)=0 (Q−P1)×(P2−P1)=0
-
Q Q Q在以 P 1 , P 2 P1,P2 P1,P2为对角顶点的矩形内。
第一条满足 Q Q Q在直线 P 1 P 2 P_1P_2 P1P2上,第二条满足 Q Q Q不在线段 P 1 P 2 P_1P_2 P1P2的两端延长线上。
判断两线段是否相交
-
快速排斥试验
若以线段 P 1 P 2 P_1P_2 P1P2为对角线的矩形为 R R R,以线段 Q 1 Q 2 Q_1Q_2 Q1Q2为对角线的矩形为 T T T,若 R R R与 T T T不相交,则两线段不相交。
-
跨立实验
若两线段相交,则两线段必然相互跨立对方。
若 P 1 P 2 P_1P_2 P1P2跨立 Q 1 Q 2 Q_1Q_2 Q1Q2,满足:
( P 1 − Q 1 ) × ( Q 2 − Q 1 ) ⋅ ( Q 2 − Q 1 ) × ( P 2 − Q 1 ) ≥ 0 (P_1-Q_1)\times(Q2-Q_1)\cdot(Q_2-Q_1)\times(P_2-Q_1)\ge0 (P1−Q1)×(Q2−Q1)⋅(Q2−Q1)×(P2−Q1)≥0
判断线段和直线是否相交
显然,若线段 P 1 P 2 P_1P_2 P1P2和直线 Q 1 Q 2 Q_1Q_2 Q1Q2相交,则 P 1 P 2 P_1P_2 P1P2跨立 Q 1 Q 2 Q_1Q_2 Q1Q2,式子同上。
判断点是否在多边形中
以点 L L L为顶点,向左作射线,计算射线与多边形的交点。
-
对于多边形的水平边不做考虑。
-
若射线与多边形顶点相交,若该点是其边纵坐标较大的点,计数。
-
若 L L L在多边形边上,直接判定 L L L在多边形中。
时间复杂度: O ( n ) O(n) O(n)。