LoginSignup
0
0

More than 1 year has passed since last update.

角度の平均の計算方法

Posted at

角度の平均を計算するためにはオイラー角を使うのではなくクオータニオンでやると良い。

protocol QuaternionProtocol {
    var quaternion: simd_quatd { get }
}

extension Collection where Element: QuaternionProtocol {
    func average() -> simd_quatd {
        self.map {
            $0.quaternion}.reduce(simd_quatd(ix: 0,iy: 0,iz: 0,r: 0),+).normalized
        
    }
}

気持ちの説明

矢印が複数あるとして、それらの角度の平均を計算したいなら、それらを数珠つなぎにして最初と最後の点を結んだ矢印の角度を測ればいい。

simd_quatd = 矢印

Reduce + = 全部足す

Normalized = 矢印の長さが1になるように拡大縮小

1の長さの矢印をオイラー角に変換する。

オイラー角ではなくクオータニオン計算すると何がいいのか?

オイラー角で計算すると、 360度をまたいだときに面倒。(ジンバルロック)
並列に計算できない。
誤差が大きい。

オイラー角でのコード 長いのがわかります。
https://qiita.com/koyo-miyamura/items/37d555ae150047ebefde

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0