天天看點

編寫函數計算度為i的結點數目_gonum::floats子產品: 計算三角形面積

本文介紹如何采用 gonum科學計算包的floats 子產品計算三角形的面積。

海倫公式

已知三角形結點坐标,可以采用海倫公式計算其面積[1]:
編寫函數計算度為i的結點數目_gonum::floats子產品: 計算三角形面積

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

函數的計算方法為:

編寫函數計算度為i的結點數目_gonum::floats子產品: 計算三角形面積

已知一條直線的兩個端點坐标分别為 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

函數求解空間中任意兩點之間的直線距離要更為簡單。

計算三角形面積

假定在三維空間中一個三角形如下所示:

編寫函數計算度為i的結點數目_gonum::floats子產品: 計算三角形面積

該三角形面積計算代碼如下所示:

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)
}
           

參考資料:

  1. 【國際數學競賽】三角形面積公式知多少?
  2. distance 函數