quaternion
quaternion は Hamilton の四元数 のための Luna-Flow ライブラリです。四元数は を満たす の形の 4 次元の数の体系です。単位四元数はオイラー角の特異点なしに 3 次元回転を表し、合成・逆・補間を安価に行えます。本ライブラリはジェネリック型 Quaternion[T] を 1 つ提供し、環演算、右除算と左除算、ノルム、ベクトルの回転、球面補間、オイラー角変換を備えています。
パッケージ
モジュール Luna-Flow/quaternion には、ソースルート src に 1 つのパッケージだけがあり、ドキュメントでは core と呼びます。
| パッケージ | インポートパス | 内容 | ページ |
|---|---|---|---|
core | Luna-Flow/quaternion | Quaternion[T]、その算術と回転の関数、DoubleConvert trait | API · チュートリアル · 設計 |
ソースは src/quaternion.mbt(型とすべての演算)、src/double_conv.mbt(DoubleConvert)、src/extends.mbt(どの trait メソッドをメソッドとして呼べるか)です。生成されたインターフェース src/pkg.generated.mbti にすべての公開シグネチャが記載されています。
概要
Quaternion[T]は成分の型についてジェネリックです。環演算はIntのような厳密な型で行え、平方根や三角関数を必要とする関数はDoubleConvertを通してDoubleで計算します。この trait はIntとDoubleに実装されています。+、-、単項-、*(Hamilton 積)が通常の演算です。*は可換ではありません。q / rは右除算 、q.left_div(r)は左除算 です。0.2.0 より前、/は を計算していました。- この型は luna-generic の
Zero、One、AddMonoid、MulMonoid、Semiring、Ring、Inverse、Conjugateを実装します。乗法が可換でないため、Fieldは実装しません。 - 回転:
from_axis_angle、from_euler、Quaternion::rotate、slerp、Quaternion::to_eulerとその 8 つの順序固定版。
どこから読むか
- 四元数が初めての方: チュートリアルをクイックスタートから「2 つの回転を比較する」まで読んでください。ベクトルと角度以上の数学は必要ありません。
- ライブラリを使う方: API リファレンスに、各関数の正確なシグネチャ、規約、境界条件、既知の問題が載っています。角度を変換する前に、そこでオイラー角の規約を確認してください。
- 貢献・レビューする方: 設計ページは Hamilton の関係式から Hamilton 積、回転公式、除算、slerp、オイラー角の抽出を導出し、各設計判断を説明し、実装が現在数学から外れている箇所を列挙しています。
インストールとツールチェーン
本ライブラリには moonc 0.10 以降の MoonBit が必要で、Luna-Flow/luna-generic 0.3.3 に依存します。次のコマンドでモジュールに追加します。
moon add Luna-Flow/quaternion@0.2.0
そして、それを使うパッケージの moon.pkg で "Luna-Flow/quaternion" をインポートします。コードはターゲットに依存せず、wasm、wasm-gc、js、native の各バックエンドでテストされています。
検証
リポジトリのルートで次を実行します。
moon check --target all
moon test --target all
moon info
moon info は src/pkg.generated.mbti を再生成します。このファイルの変更は公開 API の変更を意味します。