欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。
三角形重心坐标公式描述
在三维空间中
△ P 1 P 2 P 3 的面积为 A , P 为 △ P 1 P 2 P 3 内一点 \triangle P_1P_2P_3 的面积为A, \\ P为\triangle P_1P_2P_3内一点 △P1P2P3的面积为A,P为△P1P2P3内一点
△ P 1 P 2 P 的面积为 A 3 \triangle P_1P_2P 的面积为A_3 △P1P2P的面积为A3
△ P 1 P P 3 的面积为 A 2 \triangle P_1PP_3 的面积为A_2 △P1PP3的面积为A2
△ P P 2 P 3 的面积为 A 1 \triangle PP_2P_3 的面积为A_1 △PP2P3的面积为A1
重心坐标公式如下
P = ∑ i = 1 3 A i A P i = A 1 A P 1 + A 2 A P 2 + A 3 A P 3 … … ( 1 ) P=\displaystyle \sum_{i=1}^ 3 \frac {A_i}{A}P_i = \frac {A_1}{A}P_1+\frac {A_2}{A}P_2+\frac {A_3}{A}P_3 \ \ \ \ \ \ \ \ \ \ \ \ ……(1) P=i=1∑3AAiPi=AA1P1+AA2P2+AA3P3 ……(1)
证明式子(1)。
问题转化
由于三角形内所有点都是在同一个平面,则对三角形进行任意刚性变换不影响上述性质。所以我们可以做以下2个变换。
(1)将三角形转化到二维平面,即所有点的z坐标为0,这样可以忽略z坐标,只考虑xy坐标。
(2)假设P1=(0,0),这样我们可以利用向量叉积作面积的计算。
(3)由于计算面积都要除以2,我们将(1)式转化成下面的式子(两边同时乘以2A)。
2
A
⋅
P
=
2
A
1
P
1
+
2
A
2
P
2
+
2
A
3
P
3
…
…
…
…
(
2
)
2A \cdot P = 2{A_1}P_1+ 2{A_2}P_2+2{A_3}P_3 …………(2)
2A⋅P=2A1P1+2A2P2+2A3P3…………(2)
问题转化成在二维坐标系中,以P1为原点(2)正确性证明。
证明
对各点坐标进行定义
P
=
(
P
x
,
P
y
)
,
P
1
=
(
P
1
x
,
P
1
y
)
,
P
2
=
(
P
2
x
,
P
2
y
)
,
P
3
=
(
P
3
x
,
P
3
y
)
P=(P_x, P_y), P_1=(P_{1x}, P_{1y}), P_2=(P_{2x}, P_{2y}),P_3=(P_{3x}, P_{3y})
P=(Px,Py),P1=(P1x,P1y),P2=(P2x,P2y),P3=(P3x,P3y)
有了以上的转化和定义,我们可以利用叉乘计算所有面积
2 A = P 2 × P 3 = P 2 x ⋅ P 3 y − P 2 y ⋅ P 3 x 2A=P_2\times P_3 = P_{2x}\cdot P_{3y}- P_{2y}\cdot P_{3x} 2A=P2×P3=P2x⋅P3y−P2y⋅P3x
2 A 2 = P × P 3 = P x ⋅ P 3 y − P y ⋅ P 3 x 2A_2=P\times P_3 = P_{x}\cdot P_{3y}- P_{y}\cdot P_{3x} 2A2=P×P3=Px⋅P3y−Py⋅P3x
2 A 3 = P 2 × P = P 2 x ⋅ P y − P 2 y ⋅ P x 2A_3=P_2\times P = P_{2x}\cdot P_{y}- P_{2y}\cdot P_{x} 2A3=P2×P=P2x⋅Py−P2y⋅Px
2 A 1 = 2 A − 2 A 2 − 2 A 3 = P 2 x ⋅ P 3 y − P 2 y ⋅ P 3 x − P x ⋅ P 3 y + P y ⋅ P 3 x − P 2 x ⋅ P y + P 2 y ⋅ P x 2A_1=2A-2A_2-2A_3=P_{2x}\cdot P_{3y}- P_{2y}\cdot P_{3x}-P_{x}\cdot P_{3y}+ P_{y}\cdot P_{3x} - P_{2x}\cdot P_{y}+ P_{2y}\cdot P_{x} 2A1=2A−2A2−2A3=P2x⋅P3y−P2y⋅P3x−Px⋅P3y+Py⋅P3x−P2x⋅Py+P2y⋅Px
将上述面积替换原式(2)
2 A 1 P 1 + 2 A 2 P 2 + 2 A 3 P 3 2{A_1}P_1+ 2{A_2}P_2+2{A_3}P_3 2A1P1+2A2P2+2A3P3
=
(
0
,
0
)
+
(
P
x
⋅
P
3
y
−
P
y
⋅
P
3
x
)
⋅
(
P
2
x
,
P
2
y
)
+
(
P
2
x
⋅
P
y
−
P
2
y
⋅
P
x
)
⋅
(
P
3
x
,
P
3
y
)
=(0,0)+(P_{x}\cdot P_{3y}- P_{y}\cdot P_{3x})\cdot(P_{2x}, P_{2y})+(P_{2x}\cdot P_{y}- P_{2y}\cdot P_{x})\cdot (P_{3x}, P_{3y})
=(0,0)+(Px⋅P3y−Py⋅P3x)⋅(P2x,P2y)+(P2x⋅Py−P2y⋅Px)⋅(P3x,P3y)
乘进去,并整理一下顺序
=
[
(
P
x
⋅
P
2
x
⋅
P
3
y
−
P
y
⋅
P
2
x
⋅
P
3
x
+
P
y
⋅
P
2
x
⋅
P
3
x
−
P
x
⋅
P
2
y
⋅
P
3
x
)
,
(
P
x
⋅
P
2
y
⋅
P
3
y
−
P
y
⋅
P
2
y
⋅
P
3
x
+
P
y
⋅
P
2
x
⋅
P
3
y
−
P
x
⋅
P
2
y
⋅
P
3
y
)
]
=[(P_{x}\cdot P_{2x}\cdot P_{3y}- P_{y}\cdot P_{2x}\cdot P_{3x} + P_{y}\cdot P_{2x}\cdot P_{3x} - P_{x}\cdot P_{2y}\cdot P_{3x}),(P_{x}\cdot P_{2y}\cdot P_{3y}- P_{y}\cdot P_{2y}\cdot P_{3x} + P_{y}\cdot P_{2x}\cdot P_{3y} - P_{x}\cdot P_{2y}\cdot P_{3y})]
=[(Px⋅P2x⋅P3y−Py⋅P2x⋅P3x+Py⋅P2x⋅P3x−Px⋅P2y⋅P3x),(Px⋅P2y⋅P3y−Py⋅P2y⋅P3x+Py⋅P2x⋅P3y−Px⋅P2y⋅P3y)]
抵消相同项
=
[
(
P
x
⋅
P
2
x
⋅
P
3
y
−
P
x
⋅
P
2
y
⋅
P
3
x
)
,
(
−
P
y
⋅
P
2
y
⋅
P
3
x
+
P
y
⋅
P
2
x
⋅
P
3
y
)
]
=[(P_{x}\cdot P_{2x}\cdot P_{3y} - P_{x}\cdot P_{2y}\cdot P_{3x}), (- P_{y}\cdot P_{2y}\cdot P_{3x} + P_{y}\cdot P_{2x}\cdot P_{3y} )]
=[(Px⋅P2x⋅P3y−Px⋅P2y⋅P3x),(−Py⋅P2y⋅P3x+Py⋅P2x⋅P3y)]
提取公因子
=
(
P
2
x
⋅
P
3
y
−
P
2
y
⋅
P
3
x
)
⋅
(
P
x
,
P
y
)
= (P_{2x}\cdot P_{3y}-P_{2y}\cdot P_{3x})\cdot(P_x,P_y)
=(P2x⋅P3y−P2y⋅P3x)⋅(Px,Py)
= 2 A ⋅ P =2A\cdot P =2A⋅P
∴ ( 2 ) 式得证,( 1 )式也得证 \therefore (2)式得证,(1)式也得证 ∴(2)式得证,(1)式也得证
证毕。
本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。