本文介紹如何采用 gonum科學計算包的floats 子產品計算三角形的面積。
海倫公式
已知三角形結點坐标,可以采用海倫公式計算其面積[1]:
Go 語言實作
計算步驟
- 根據三角形的結點坐标計算其各邊邊長;
- 采用海倫公式計算三角形的面積
求解三角形各邊的邊長
三角形各邊的邊長可以采用
distance
函數[2]直接進行計算,該函數原型為:
// Distance computes the L-norm of s - t. See Norm for special cases. It panics if the slice argument lengths do not match.
func Distance(s, t []float64, L float64) float64
distance
函數的計算方法為:
已知一條直線的兩個端點坐标分别為 A(0, 1, 2) 和 B(2, 3, 4),則其長度可以采用如下代碼進行計算:
package main
import (
"fmt"
"gonum.org/v1/gonum/floats"
"math"
)
func main() {
pa := []float64{0, 1, 2}
pb := []float64{2, 3, 4}
// 采用 Distance 函數計算直線長度
l1 := floats.Distance(pa, pb, 2)
// 直接求解直線的長度
l2 := 0.0
for i := 0; i < 3; i++ {
l2 += math.Pow(pa[i]-pb[i], 2)
}
l2 = math.Sqrt(l2)
fmt.Println("l1 = ", l1)
fmt.Println("l2 = ", l2)
}
/* 計算結果
l1 = 3.4641016151377544
l2 = 3.4641016151377544
*/
根據上述代碼可以發現,采用
distance
函數求解空間中任意兩點之間的直線距離要更為簡單。
計算三角形面積
假定在三維空間中一個三角形如下所示:
該三角形面積計算代碼如下所示:
package main
import (
"fmt"
"gonum.org/v1/gonum/floats"
"math"
)
func main() {
// 三維空間中三角形各結點的坐标
pa := []float64{0, 1, 2}
pb := []float64{2, 3, 6}
pc := []float64{3, 4, 5}
// 采用 Distance 函數計算三角形各邊邊長
la := floats.Distance(pa, pb, 2)
lb := floats.Distance(pb, pc, 2)
lc := floats.Distance(pc, pa, 2)
// 采用海倫公式計算三角形面積
p := (la + lb + lc) / 2.0
area := math.Sqrt(p * (p - la) * (p - lb) * (p - lc))
fmt.Println("area = ", area)
}
參考資料:
- 【國際數學競賽】三角形面積公式知多少?
- distance 函數