Go語言程式用於計算兩個向量的叉積


叉積是在三維空間中對兩個向量執行的操作,其結果是第三個向量,該向量與原始向量正交(垂直)。在本文中,我們將瞭解查詢兩個向量叉積的 Go 語言程式,這裡我們將探討兩種不同的方法。

解釋

假設我們有兩個向量 A 和 B。這兩個向量的叉積可以透過公式計算

C = A X B.

叉積向量的分量可以透過公式計算

Cx =Ay ⋅Bz −Az ⋅By
Cy =Az ⋅Bx −Ax ⋅Bz
Cz =Ax ⋅By −Ay ⋅Bx

A 的值為 (1,2,3),B 的值為 (4,5,6),然後使用上述公式,我們可以計算出叉積向量,如下所示

Cx = (2.6) - (3.5) = -3

Cy = (3.4) - (1.6) = 6

Cz = (1.5) - (2.4) = -3

叉積 C = (-3,6,-3)。

演算法

  • 定義一個名為“CrossProduct”的函式,該函式以兩個向量“a”和“b”作為輸入,並將叉積作為向量返回。

  • 使用“mat.NewVecDense”函式從向量“b”的值建立向量“bVec”。

  • 建立一個 3x3 矩陣“crossProductMat”,它表示計算叉積的公式。此矩陣中的值來自向量“a”的分量。

  • 使用“result.MulVec”方法將矩陣“crossProductMat”和“bVec”相乘。使用“result.RawVector().Data”方法檢索結果向量的原始資料,並將其作為叉積返回。

  • 在主函式中

    • 定義兩個向量“a”和“b”,以及它們各自的分量。

    • 使用“a”和“b”作為引數呼叫“CrossProduct”函式以計算叉積。

    • 將結果叉積列印到控制檯。

語法

func CrossProduct(a, b Vector) Vector

語法定義了一個名為 CrossProduct 的函式,該函式計算三維空間中兩個向量 a 和 b 的叉積。它以 Vector 型別的兩個向量作為輸入,並返回結果叉積向量,該向量也是 Vector 型別。

func CrossProduct(a, b []float64) []float64 {

語法定義了一個名為 CrossProduct 的函式,該函式計算表示為 float64 值切片的兩個向量 a 和 b 的叉積。它利用矩陣乘法來執行計算。該函式以兩個輸入切片 a 和 b 作為輸入,並返回表示結果叉積的切片。函式簽名指定它以兩個 float64 切片 a 和 b 作為輸入,並返回一個 float64 切片。

示例 1

在此示例中,我們定義了一個具有 X、Y 和 Z 分量的 Vector 結構體。CrossProduct 函式以兩個向量作為輸入,並返回結果叉積向量。我們建立兩個向量 a 和 b,並使用 CrossProduct 函式計算它們的叉積。在函式中,我們將直接使用公式 (A × B = (A_y * B_z - A_z * B_y, A_z * B_x - A_x * B_z, A_x * B_y - A_y * B_x))。最後,我們將結果列印到控制檯。

package main
import "fmt"
type Vector struct {
   X, Y, Z float64
}
func CrossProduct(a, b Vector) Vector {
   return Vector{
      X: a.Y*b.Z - a.Z*b.Y,
      Y: a.Z*b.X - a.X*b.Z,
      Z: a.X*b.Y - a.Y*b.X,
   }
}
func main() {
   a := Vector{X: 1, Y: 2, Z: 3}
   b := Vector{X: 4, Y: 5, Z: 6}
   crossProduct := CrossProduct(a, b)
   fmt.Println("The CrossProduct vector is :", crossProduct)
}

輸出

The CrossProduct vector is : {-3 6 -3}

示例 2

在此示例中,我們將向量表示為 3x1 矩陣,並執行矩陣乘法以獲得結果叉積向量,在查詢兩個向量的叉積的 Go 語言程式中,我們使用 Gonum 庫 (gonum.org/v1/gonum/mat) 來處理矩陣。我們定義 CrossProduct 函式,該函式以表示向量 a 和 b 的兩個切片作為輸入。我們為向量 a 和 b 建立 3x1 矩陣。並將這些矩陣相乘以獲得結果叉積矩陣。最後,我們將結果矩陣轉換回 float64 值的切片,並將叉積列印到控制檯。

package main
import (
   "fmt"
   "gonum.org/v1/gonum/mat"
) 
func CrossProduct(a, b []float64) []float64 {
   bVec := mat.NewVecDense(3, b)
   crossProductMat := mat.NewDense(3, 3, []float64{
      0, -a[2], a[1],
      a[2], 0, -a[0],
      -a[1], a[0], 0,
})
   result := mat.NewVecDense(3, nil)
   result.MulVec(crossProductMat, bVec)
   return result.RawVector().Data
}
func main() {
   a := []float64{1, 2, 3}
   b := []float64{4, 5, 6}
   crossProduct := CrossProduct(a, b)
   fmt.Println("The Cross Product is :", crossProduct)
}

輸出

Cross Product: [-3 6 -3]

現實生活中的應用

  • 機器人技術:叉積的使用在機器人領域的運動規劃和控制領域非常普遍。當需要在三維空間內操作機械臂或機構時,叉積的使用應用於計算關節所需的扭矩和控制訊號。這確保了機器人的運動精確且一致。

  • 天文學:天文學領域中對天體軌道角動量的計算涉及叉積的使用。圍繞中心天體執行的行星或任何其他天體的角動量向量是透過對其位置向量和速度向量進行叉積獲得的。這有助於理解天文軌道的力學,並能夠預測其軌跡。

結論

叉積也稱為向量積,因為它以兩個向量作為輸入,併產生一個向量作為輸出。在本文中,我們研究了兩種不同的 Go 語言程式來查詢兩個向量的叉積。第一種方法涉及使用叉積公式進行直接計算,而第二種方法則利用矩陣乘法。叉積通常用於各種應用中,包括計算機圖形學、物理學和工程學。這兩種方法都產生相同的結果,方法的選擇取決於程式的具體要求。

更新於: 2023年10月18日

154 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.