Lumino
ln::Quaternion Struct Reference

クォータニオンを定義します。 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 かを判別します。
 
Quaternionoperator*= (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); と同じです。
 

Detailed Description

クォータニオンを定義します。

このクォータニオンクラスの乗算の順番は左から右です。 つまり、q1 * q2 は、先に q1、次に q2 の回転を適用する事と同じです。

この乗算順序は数学的な四元数の定義からは逆行している点に注意してください。

Constructor & Destructor Documentation

◆ Quaternion()

ln::Quaternion::Quaternion ( const Vector3 axis,
float  r 
)

回転軸と回転角度を指定してインスタンスを初期化します。

Parameters
[in]axis: 回転軸
[in]r: 回転角度 (ラジアン単位)

axis が単位ベクトルでなければ正規化してから計算を行います。

Member Function Documentation

◆ conjugate()

static Quaternion ln::Quaternion::conjugate ( const Quaternion qua)
static

指定クォータニオンの共役を返します。

Parameters
[in]qua: 処理の基になるクォータニオン
Returns
共役クォータニオン

◆ data() [1/2]

float* ln::Quaternion::data ( )
inlinenoexcept

Returns pointer to the first element.

◆ data() [2/2]

const float* ln::Quaternion::data ( ) const
inlinenoexcept

Returns pointer to the first element.

◆ dot()

static float ln::Quaternion::dot ( const Quaternion qua1,
const Quaternion qua2 
)
static

2つのクォータニオンの内積を計算します。

Parameters
[in]qua1: 処理の基になるクォータニオン
[in]qua2: 処理の基になるクォータニオン
Returns
2つのクォータニオンの内積

◆ isIdentity()

bool ln::Quaternion::isIdentity ( ) const
inline

このクォータニオンが単位クォータニオンであるかを判定します。

Returns
true の場合、単位クォータニオンである

◆ lookRotation()

static Quaternion ln::Quaternion::lookRotation ( const Vector3 forward,
const Vector3 up = Vector3::UnitY 
)
static

指定した方向を向くように回転するクオータニオンを作成します。

Parameters
[in]forward: 向かせたい方向
[in]up: 上方向
Returns
演算結果のクォータニオン

◆ makeFromEulerAngles()

static Quaternion ln::Quaternion::makeFromEulerAngles ( const Vector3 angles,
RotationOrder  order = RotationOrder::ZXY 
)
static

XYZ 各軸のオイラー角からクォータニオンを作成します。

Parameters
[in]angles: XYZ 各軸の回転角度 (ラジアン単位)
[in]order: 回転順序
Returns
演算結果のクォータニオン

◆ makeFromRotationAxis()

static Quaternion ln::Quaternion::makeFromRotationAxis ( const Vector3 axis,
float  r 
)
static

回転軸と角度を指定してクォータニオンを作成します。

Parameters
[in]axis: 回転軸
[in]r: 回転角度 (ラジアン単位)
Returns
新しく作成されたクォータニオン

axis が単位ベクトルでなければ正規化してから計算を行います。

◆ makeFromRotationMatrix()

static Quaternion ln::Quaternion::makeFromRotationMatrix ( const Matrix mat)
static

回転行列からクォータニオンを作成します。

Parameters
[in]mat: 処理の基になる行列
Returns
新しく作成されたクォータニオン

◆ makeFromYawPitchRoll()

static Quaternion ln::Quaternion::makeFromYawPitchRoll ( float  yaw,
float  pitch,
float  roll 
)
static

ヨー、ピッチ、ロールを指定してクォータニオンを作成します。

Parameters
[in]yaw: y 軸を中心とするヨー (ラジアン単位)
[in]pitch: x 軸を中心とするピッチ (ラジアン単位)
[in]roll: z 軸を中心とするロール (ラジアン単位)
Returns
新しく作成されたクォータニオン

回転順序は Z → X → Y です。引数の並びとは逆順であることに注意してください。 これは D3DXQuaternionRotationYawPitchRoll の回転順序と同じで、 RotationEulerAngles に RotationOrder_ZXY を指定して計算した結果とも同じです。

◆ makeInverse()

static Quaternion ln::Quaternion::makeInverse ( const Quaternion qua)
static

クォータニオンを共役し、再正規化します。

Parameters
[in]qua: 処理の基になるクォータニオン
Returns
逆数クォータニオン

逆数クォータニオンは逆行列のように、元の回転を打ち消すクォータニオンです。 次のようにすると、回転を打ち消し合い Identity の値と一致します。

◆ multiply() [1/2]

void ln::Quaternion::multiply ( const Quaternion qua)

このクォータニオンに指定されたクォータニオンを乗算します。

Parameters
[in]qua: 乗算するクォータニオン

◆ multiply() [2/2]

static Quaternion ln::Quaternion::multiply ( const Quaternion qua1,
const Quaternion qua2 
)
static

2つのクォータニオンの積を計算します。

Parameters
[in]qua1: 処理の基になるクォータニオン
[in]qua2: 処理の基になるクォータニオン

Multiply(qua1, qua2) は、先に qua1、次に qua2 の回転を行うクォータニオンを作成します。

◆ normalize()

static Quaternion ln::Quaternion::normalize ( const Quaternion qua)
static

指定クォータニオンを正規化したクォータニオンを返します。

Parameters
[in]qua: 処理の基になるクォータニオン
Returns
正規化されたクォータニオン

◆ rotateAxis()

void ln::Quaternion::rotateAxis ( const Vector3 axis,
float  r 
)

このクォータニオンを回転軸と角度を指定して回転します。

Parameters
[in]axis: 回転軸
[in]r: 回転角度 (ラジアン単位) axis が単位ベクトルでなければ正規化してから計算を行います。

◆ rotateX()

void ln::Quaternion::rotateX ( float  angle)

このクォータニオンを X 軸で回転します。

Parameters
[in]angle: 回転角度 (ラジアン単位)

◆ rotateY()

void ln::Quaternion::rotateY ( float  angle)

このクォータニオンを Y 軸で回転します。

Parameters
[in]angle: 回転角度 (ラジアン単位)

◆ rotateZ()

void ln::Quaternion::rotateZ ( float  angle)

このクォータニオンを Z 軸で回転します。

Parameters
[in]angle: 回転角度 (ラジアン単位)

◆ slerp()

static Quaternion ln::Quaternion::slerp ( const Quaternion qua1,
const Quaternion qua2,
float  t 
)
static

球面線形補間を使用して、2 つのクオータニオン間を補間します。

Parameters
[in]qua1: 処理の基になるクオータニオン (t = 0.0 のときの値)
[in]qua2: 処理の基になるクオータニオン (t = 1.0 のときの値)
[in]t: 加重係数
Returns
補間結果のクォータニオン

t は通常、0.0~1.0 を指定します。

◆ toAxisAngle()

void ln::Quaternion::toAxisAngle ( Vector3 axis,
float *  angle 
) const

このクォータニオンの回転軸と回転角度を取得します。

Parameters
[in]axis: 回転軸を格納するベクトルのポインタ
[in]angle: 回転角度を格納する変数のポインタ

axis には単位ベクトルを格納します。

◆ toEulerAngles()

Vector3 ln::Quaternion::toEulerAngles ( RotationOrder  order = RotationOrder::ZXY,
bool *  locked = nullptr 
) const

このクォータニオンを XYZ 各軸のオイラー角度に変換します。

Parameters
[in]order: 回転順序
[in]locked: ジンバルロックの発生有無を格納する変数へのポインタ (ジンバルロックが発生した場合 true)
Returns
XYZ 各軸のオイラー角度 (ラジアン単位) を格納したベクトル

クォータニオンは order に指定された順序で乗算されたものでなければ本来の回転角度が取得できないことに注意してください。

例えば RotationYawPitchRoll() は、回転軸 Z → Y → X の順に回転を行いますが、 これから元の角度を取り出すには RotationOrder_ZXY を指定します。


The documentation for this struct was generated from the following file: