三角形的外接圓
行列式
三角形的外接圓圓心也就是三角形的外心,一搜到處都有球外心的公式:
如果我們想推導一下的話,首先圓的方程式為:
,代入三個點:
寫成矩陣形式:
也就是行列式:
展開:
對比就是上面的方程式:
對比一下這個方程式和圓的圓心方程式:
對比上下兩式可知:
所以有最上面的求外心的式子。
同時值得指出的還有其實分母是三角形面積公式的4倍,即:
這個式子可以透過簡單的叉乘也可以透過格林公式證明。
初中幾何
如果我們就是簡單的算一下2維平面上的三角形的外心還要引入矩陣,行列式在有些情況下就顯得有點大材小用。有時候就從簡,直接利用這個三角形的外心是三邊的垂直平分線的交點既可。可能有以下幾種情況:
算出兩條直線,找到它們的交點,即算出三角形的外心:
def
circumcircle
(
triangle
):
v1
,
v2
,
v3
=
triangle
x1
,
y1
=
v1
x2
,
y2
=
v2
x3
,
y3
=
v3
absy1y2
=
abs
(
y1
-
y2
)
absy2y3
=
abs
(
y2
-
y3
)
# 這種情況三點共線,無法生成外接圓
if
absy1y2
<
EPSION
and
absy2y3
<
EPSION
:
return
# 第一種情況, v1和v2基本水平
if
absy1y2
<
EPSION
:
m2
=
-
(
x3
-
x2
)
/
(
y3
-
y2
)
mx2
=
(
x2
+
x3
)
/
2
my2
=
(
y2
+
y3
)
/
2
xc
=
(
x2
+
x1
)
/
2
yc
=
m2
*
(
xc
-
mx2
)
+
my2
# 第二種情況: v2和v3基本水平
elif
absy2y3
<
EPSION
:
m1
=
-
(
x2
-
x1
)
/
(
y2
-
y1
)
mx1
=
(
x1
+
x2
)
/
2
my1
=
(
y1
+
y2
)
/
2
xc
=
(
x2
+
x3
)
/
2
yc
=
m1
*
(
xc
-
mx1
)
+
my1
# 情況三:
else
:
m1
=
-
(
x2
-
x1
)
/
(
y2
-
y1
)
m2
=
-
(
x3
-
x2
)
/
(
y3
-
y2
)
mx1
=
(
x1
+
x2
)
/
2
mx2
=
(
x2
+
x3
)
/
2
my1
=
(
y1
+
y2
)
/
2
my2
=
(
y2
+
y3
)
/
2
xc
=
(
m1
*
mx1
-
m2
*
mx2
+
my2
-
my1
)
/
(
m1
-
m2
)
# y1y2 之間差距更大,更不容易出現直線非常靠近垂直的狀況,靠近垂直線意味著斜率很大,這樣相乘的話誤差可能會比較極端
yc
=
m1
*
(
xc
-
mx1
)
+
my1
if
(
absy1y2
>
absy2y3
)
else
m2
*
(
xc
-
mx2
)
+
my2
dx
=
x2
-
xc
dy
=
y2
-
yc
return
Circle
(
Point
(
xc
,
yc
),
math
。
sqrt
(
dx
*
dx
+
dy
*
dy
))
產生題圖程式碼:
上一篇:如何提煉文章中的資訊點?