标准问题
坐标轴中有 A , B , C A,B,C A,B,C三点,坐标为 ( 0 , 0 ) , ( x B , y B ) , ( x C , y C ) (0,0),(x_B,y_B),(x_C,y_C) (0,0),(xB,yB),(xC,yC),求由这三点围成的三角形面积。
解法
可以从点 B B B作垂线,与 A C AC AC交于 E E E点。再从点 A A A作 A D ⊥ B E AD\perp BE AD⊥BE于 D D D点,从点 C C C作 C F ⊥ B E CF\perp BE CF⊥BE于 F F F点。
这样可以推出
S
Δ
A
B
C
=
S
Δ
A
B
E
+
S
Δ
B
C
E
=
1
2
A
D
⋅
B
E
+
1
2
C
F
⋅
B
E
=
1
2
B
E
(
A
D
+
C
F
)
=
1
2
x
C
(
y
B
−
y
E
)
\begin{align} S_{\Delta ABC}&= S_{\Delta ABE}+S_{\Delta BCE}\\ &=\frac{1}{2}AD\cdot BE+\frac{1}{2}CF\cdot BE\\ &=\frac{1}{2}BE(AD+CF)\\ &=\frac{1}{2}x_C(y_B-y_E) \end{align}
SΔABC=SΔABE+SΔBCE=21AD⋅BE+21CF⋅BE=21BE(AD+CF)=21xC(yB−yE)
由
y
E
=
y
C
x
C
x
B
y_E=\frac{y_C}{x_C}x_B
yE=xCyCxB,可以得出
S
Δ
A
B
C
=
1
2
x
C
(
y
B
−
y
C
x
C
x
E
)
=
1
2
(
x
C
⋅
y
B
−
x
B
⋅
y
C
)
\begin{align} S_{\Delta ABC}&=\frac{1}{2}x_C(y_B-\frac{y_C}{x_C}x_E)\\ &=\frac{1}{2}(x_C\cdot y_B-x_B\cdot y_C)\\ \end{align}
SΔABC=21xC(yB−xCyCxE)=21(xC⋅yB−xB⋅yC)
问题变形
坐标轴上有 A , B , C A,B,C A,B,C三点,坐标为 ( x A , y A ) , ( x B , y B ) , ( x C , y C ) (x_A,y_A),(x_B,y_B),(x_C,y_C) (xA,yA),(xB,yB),(xC,yC),求由这三点围成的三角形面积。
像这样的问题可以被转化为一个标准问题:
坐标轴中有
A
,
B
,
C
A,B,C
A,B,C三点,坐标为
(
0
,
0
)
,
(
x
B
−
x
A
,
y
B
−
y
A
)
,
(
x
C
−
x
A
,
y
C
−
y
A
)
(0,0),(x_B-x_A,y_B-y_A),(x_C-x_A,y_C-y_A)
(0,0),(xB−xA,yB−yA),(xC−xA,yC−yA),求由这三点围成的三角形面积。
把上面的公式转换一下,就成了
S
Δ
A
B
C
=
1
2
(
∣
x
C
−
x
A
∣
⋅
∣
y
B
−
y
A
∣
−
∣
x
B
−
x
A
∣
⋅
∣
y
C
−
y
A
∣
)
S_{\Delta ABC}=\frac{1}{2}(|x_C-x_A|\cdot |y_B-y_A|-|x_B-x_A|\cdot |y_C-y_A|)
SΔABC=21(∣xC−xA∣⋅∣yB−yA∣−∣xB−xA∣⋅∣yC−yA∣)
代码
double square(double xa,double ya,double xb,double yb,double xc,double yc){
return 0.5 * ((xc - xa) * (yb - ya) + (xb - xa) * (yc - ya));
}