![]() |
Lumino
|
クォータニオンを定義します。 More...
#include <Quaternion.hpp>
Public Member Functions | |
Quaternion () | |
単位クォータニオンを設定してインスタンスを初期化します。 | |
Quaternion (float x, float y, float z, float w) | |
指定した値を使用してインスタンスを初期化します。 | |
Quaternion (const Vector3 &axis, float r) | |
回転軸と回転角度を指定してインスタンスを初期化します。 More... | |
void | set (float x, float y, float z, float w) |
各要素に値を設定します。 | |
float * | data () noexcept |
Returns pointer to the first element. More... | |
const float * | data () const noexcept |
Returns pointer to the first element. More... | |
float | length () const |
このクォータニオンの長さを返します。 | |
float | lengthSquared () const |
このクォータニオンの長さの 2 乗を返します。 | |
void | normalize () |
このクォータニオンを正規化します。 | |
bool | isIdentity () const |
このクォータニオンが単位クォータニオンであるかを判定します。 More... | |
void | multiply (const Quaternion &qua) |
このクォータニオンに指定されたクォータニオンを乗算します。 More... | |
void | rotateX (float angle) |
このクォータニオンを X 軸で回転します。 More... | |
void | rotateY (float angle) |
このクォータニオンを Y 軸で回転します。 More... | |
void | rotateZ (float angle) |
このクォータニオンを Z 軸で回転します。 More... | |
void | rotateAxis (const Vector3 &axis, float r) |
このクォータニオンを回転軸と角度を指定して回転します。 More... | |
Vector3 | toEulerAngles (RotationOrder order=RotationOrder::ZXY, bool *locked=nullptr) const |
このクォータニオンを XYZ 各軸のオイラー角度に変換します。 More... | |
void | toAxisAngle (Vector3 *axis, float *angle) const |
このクォータニオンの回転軸と回転角度を取得します。 More... | |
bool | isNaNOrInf () const |
要素のいずれかが NaN または Inf かを判別します。 | |
Quaternion & | operator*= (const Quaternion &v) |
this->Multiply(v); と同じです。 | |
Static Public Member Functions | |
static Quaternion | normalize (const Quaternion &qua) |
指定クォータニオンを正規化したクォータニオンを返します。 More... | |
static Quaternion | conjugate (const Quaternion &qua) |
指定クォータニオンの共役を返します。 More... | |
static float | dot (const Quaternion &qua1, const Quaternion &qua2) |
2つのクォータニオンの内積を計算します。 More... | |
static Quaternion | multiply (const Quaternion &qua1, const Quaternion &qua2) |
2つのクォータニオンの積を計算します。 More... | |
static Quaternion | makeInverse (const Quaternion &qua) |
クォータニオンを共役し、再正規化します。 More... | |
static Quaternion | makeFromRotationAxis (const Vector3 &axis, float r) |
回転軸と角度を指定してクォータニオンを作成します。 More... | |
static Quaternion | makeFromRotationMatrix (const Matrix &mat) |
回転行列からクォータニオンを作成します。 More... | |
static Quaternion | makeFromYawPitchRoll (float yaw, float pitch, float roll) |
ヨー、ピッチ、ロールを指定してクォータニオンを作成します。 More... | |
static Quaternion | makeFromEulerAngles (const Vector3 &angles, RotationOrder order=RotationOrder::ZXY) |
XYZ 各軸のオイラー角からクォータニオンを作成します。 More... | |
static Quaternion | slerp (const Quaternion &qua1, const Quaternion &qua2, float t) |
球面線形補間を使用して、2 つのクオータニオン間を補間します。 More... | |
static Quaternion | lookRotation (const Vector3 &forward, const Vector3 &up=Vector3::UnitY) |
指定した方向を向くように回転するクオータニオンを作成します。 More... | |
Public Attributes | |
float | x |
X 要素 | |
float | y |
Y 要素 | |
float | z |
Z要素 | |
float | w |
W 要素 | |
Static Public Attributes | |
static const Quaternion | Identity |
単位クォータニオン (0, 0, 0, 1) | |
Friends | |
Quaternion | operator* (const Quaternion &v1, const Quaternion &v2) |
Quaternion::Multiply(v1, v2); と同じです。 | |
クォータニオンを定義します。
このクォータニオンクラスの乗算の順番は左から右です。 つまり、q1 * q2 は、先に q1、次に q2 の回転を適用する事と同じです。
この乗算順序は数学的な四元数の定義からは逆行している点に注意してください。
ln::Quaternion::Quaternion | ( | const Vector3 & | axis, |
float | r | ||
) |
回転軸と回転角度を指定してインスタンスを初期化します。
[in] | axis | : 回転軸 |
[in] | r | : 回転角度 (ラジアン単位) |
axis が単位ベクトルでなければ正規化してから計算を行います。
|
static |
指定クォータニオンの共役を返します。
[in] | qua | : 処理の基になるクォータニオン |
|
inlinenoexcept |
Returns pointer to the first element.
|
inlinenoexcept |
Returns pointer to the first element.
|
static |
2つのクォータニオンの内積を計算します。
[in] | qua1 | : 処理の基になるクォータニオン |
[in] | qua2 | : 処理の基になるクォータニオン |
|
inline |
このクォータニオンが単位クォータニオンであるかを判定します。
|
static |
指定した方向を向くように回転するクオータニオンを作成します。
[in] | forward | : 向かせたい方向 |
[in] | up | : 上方向 |
|
static |
XYZ 各軸のオイラー角からクォータニオンを作成します。
[in] | angles | : XYZ 各軸の回転角度 (ラジアン単位) |
[in] | order | : 回転順序 |
|
static |
回転軸と角度を指定してクォータニオンを作成します。
[in] | axis | : 回転軸 |
[in] | r | : 回転角度 (ラジアン単位) |
axis が単位ベクトルでなければ正規化してから計算を行います。
|
static |
回転行列からクォータニオンを作成します。
[in] | mat | : 処理の基になる行列 |
|
static |
ヨー、ピッチ、ロールを指定してクォータニオンを作成します。
[in] | yaw | : y 軸を中心とするヨー (ラジアン単位) |
[in] | pitch | : x 軸を中心とするピッチ (ラジアン単位) |
[in] | roll | : z 軸を中心とするロール (ラジアン単位) |
回転順序は Z → X → Y です。引数の並びとは逆順であることに注意してください。 これは D3DXQuaternionRotationYawPitchRoll の回転順序と同じで、 RotationEulerAngles に RotationOrder_ZXY を指定して計算した結果とも同じです。
|
static |
クォータニオンを共役し、再正規化します。
[in] | qua | : 処理の基になるクォータニオン |
逆数クォータニオンは逆行列のように、元の回転を打ち消すクォータニオンです。 次のようにすると、回転を打ち消し合い Identity の値と一致します。
void ln::Quaternion::multiply | ( | const Quaternion & | qua | ) |
このクォータニオンに指定されたクォータニオンを乗算します。
[in] | qua | : 乗算するクォータニオン |
|
static |
2つのクォータニオンの積を計算します。
[in] | qua1 | : 処理の基になるクォータニオン |
[in] | qua2 | : 処理の基になるクォータニオン |
Multiply(qua1, qua2) は、先に qua1、次に qua2 の回転を行うクォータニオンを作成します。
|
static |
指定クォータニオンを正規化したクォータニオンを返します。
[in] | qua | : 処理の基になるクォータニオン |
void ln::Quaternion::rotateAxis | ( | const Vector3 & | axis, |
float | r | ||
) |
このクォータニオンを回転軸と角度を指定して回転します。
[in] | axis | : 回転軸 |
[in] | r | : 回転角度 (ラジアン単位) axis が単位ベクトルでなければ正規化してから計算を行います。 |
void ln::Quaternion::rotateX | ( | float | angle | ) |
このクォータニオンを X 軸で回転します。
[in] | angle | : 回転角度 (ラジアン単位) |
void ln::Quaternion::rotateY | ( | float | angle | ) |
このクォータニオンを Y 軸で回転します。
[in] | angle | : 回転角度 (ラジアン単位) |
void ln::Quaternion::rotateZ | ( | float | angle | ) |
このクォータニオンを Z 軸で回転します。
[in] | angle | : 回転角度 (ラジアン単位) |
|
static |
球面線形補間を使用して、2 つのクオータニオン間を補間します。
[in] | qua1 | : 処理の基になるクオータニオン (t = 0.0 のときの値) |
[in] | qua2 | : 処理の基になるクオータニオン (t = 1.0 のときの値) |
[in] | t | : 加重係数 |
t は通常、0.0~1.0 を指定します。
void ln::Quaternion::toAxisAngle | ( | Vector3 * | axis, |
float * | angle | ||
) | const |
このクォータニオンの回転軸と回転角度を取得します。
[in] | axis | : 回転軸を格納するベクトルのポインタ |
[in] | angle | : 回転角度を格納する変数のポインタ |
axis には単位ベクトルを格納します。
Vector3 ln::Quaternion::toEulerAngles | ( | RotationOrder | order = RotationOrder::ZXY , |
bool * | locked = nullptr |
||
) | const |
このクォータニオンを XYZ 各軸のオイラー角度に変換します。
[in] | order | : 回転順序 |
[in] | locked | : ジンバルロックの発生有無を格納する変数へのポインタ (ジンバルロックが発生した場合 true) |
クォータニオンは order に指定された順序で乗算されたものでなければ本来の回転角度が取得できないことに注意してください。
例えば RotationYawPitchRoll() は、回転軸 Z → Y → X の順に回転を行いますが、 これから元の角度を取り出すには RotationOrder_ZXY を指定します。