ETH官方钱包

前往
大廳
主題

ZeroJudge - g047: 三角形的外心 解題心得

Not In My Back Yard | 2021-07-30 00:00:03 | 巴幣 0 | 人氣 476

題目連結:


題目大意:
輸入有多列,每列給定六個整數 xa 、 ya 、 xb 、 yb 、 xc 、 yc(-1000 ≦ xa 、 ya 、 xb 、 yb 、 xc 、 yc ≦ 1000),代表座標平面上的三個點 A(xa, ya) 、 B(xb, yb) 和 C(xc, yc),試問 ABC 所形成的三角形之外心座標為何?如果沒有外心則輸出「No circumcenter.」;反之則將座標值四捨五入至小數點後第三位後輸出。



範例輸入:
1 2 -2 -4 7 -1
3 4 6 -1 -1 -2
-1 -1 0 0 1 1


範例輸出:
2.500 -2.500
2.263 0.158
No circumcenter.


解題思維:
為了簡化問題,我們先將點 A 變成新的原點。因此點 B 變成了 (xb', yb') 、點 C 為 (xc', yc'),其中 xb' = xb - xa 、 yb' = yb - ya 、 xc' = xc - xa 、 yc' = yc - ya。

而根據外心的尺規作圖方式,即在 AB 邊上做一中垂線 L2 和 AC 邊上做一中垂線 L3 且 L2 與 L3 將交於一點,該交點便是外心。因此我們可以畫出如下圖之圖形:
利用點斜式得出 L2 和 L3 的直線方程式,兩條直線便形成了一個二元一次方程組。根據克拉瑪公式(Cramer's Rule)可得交點座標 (x, y) 應為
其中

不過因為我們先前有將整個座標往點 A 移動,所以我們現在將其移動回去。因此外心最終座標為
(x + xa, y + ya)
且可以看到當 Δ = 0 時其恰好代表著點 A 、 B 、 C 共線甚至是重疊。此時外心不存在(三角形退化成一條線段或是一個點),因此輸出「No circumcenter.」。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作