nlib
nn::nlib::simd::Quaternion クラス

クォータニオンを扱う関数が集められたクラスです。 [詳解]

#include "nn/nlib/simd/SimdQuaternion.h"

静的公開メンバ関数

static SimdQuaternion Identity () noexcept
 単位クォータニオン (0, 0, 0, 1)を返します。
 
static SimdQuaternion Conjugate (SimdQuaternionArg q) noexcept
 共役クォータニオン(-x, -y, -z, w)を返します。
 
static f128 Length (SimdQuaternionArg q) noexcept
 クォータニオンの大きさを返します。 [詳解]
 
static f128 LengthSq (SimdQuaternionArg q) noexcept
 クォータニオンの大きさの2乗を返します。 [詳解]
 
static f128 RecpLength (SimdQuaternionArg q) noexcept
 クォータニオンの大きさの逆数を返します。 [詳解]
 
static SimdQuaternion Normalize (SimdQuaternionArg q) noexcept
 クォータニオンを正規化します。 [詳解]
 
static SimdQuaternion NormalizeEst (SimdQuaternionArg q) noexcept
 クォータニオンを相対的に低い精度で正規化します。 [詳解]
 
static SimdQuaternion Inverse (SimdQuaternionArg q) noexcept
 クォータニオンの逆数を計算します。 [詳解]
 
static SimdQuaternion Ln (SimdQuaternionArg q_normalized) noexcept
 正規化されたクォータニオンの自然対数を計算します。 [詳解]
 
static SimdQuaternion Exp (SimdQuaternionArg q) noexcept
 クォータニオンの指数を計算します。 [詳解]
 
static bool IsIdentity (SimdQuaternionArg q) noexcept
 クォータニオンが単位クォータニオンであるかを検証します。 [詳解]
 
static bool IsInfinite (SimdQuaternionArg q) noexcept
 クォータニオンが無限大の要素を持つかを検証します。 [詳解]
 
static bool IsNaN (SimdQuaternionArg q) noexcept
 クォータニオンが非数の要素を持つかを検証します。 [詳解]
 
static bool CmpEq (SimdQuaternionArg q0, SimdQuaternionArg q1) noexcept
 クォータニオンが等しいかどうかを検証します。 [詳解]
 
static bool CmpNe (SimdQuaternionArg q0, SimdQuaternionArg q1) noexcept
 クォータニオンが等しくないかどうかを検証します。 [詳解]
 
static f128 Dot (SimdQuaternionArg q0, SimdQuaternionArg q1) noexcept
 クォータニオンの内積を計算します。 [詳解]
 
static SimdQuaternion Mult (SimdQuaternionArg q0, SimdQuaternionArg q1) noexcept
 クオータニオンの乗算を計算します。 [詳解]
 
static SimdQuaternion FromRotationAxisAndSinCos (SimdVectorArg axis_normalized, float sin_half_rad, float cos_half_rad) noexcept
 軸と回転角(の半分のsin/cos)からクォータニオンを計算します。 [詳解]
 
static SimdQuaternion FromRotationMatrix (SimdMatrixArg m) noexcept
 回転行列からクォータニオンを計算します。 [詳解]
 
static SimdQuaternion FromRotationZXY (SimdVectorArg sin_half_xyz, SimdVectorArg cos_half_xyz) noexcept
 ZXY軸それぞれの回転角(の半分のsin/cos)からクォータニオンを計算します。 [詳解]
 
static SimdVector ToAxisAngle (float *rad, SimdQuaternion q) noexcept
 クォータニオンから回転軸のベクトルと回転角のラジアンを計算します。 [詳解]
 
static SimdQuaternion Slerp (SimdQuaternionArg q0_normalized, SimdQuaternionArg q1_normalized, float t) noexcept
 クォータニオンの球面線形補間を行います。 [詳解]
 
static SimdQuaternion Squad (SimdQuaternionArg q0_normalized, SimdQuaternionArg q1_normalized, SimdQuaternionArg q2_normalized, SimdQuaternionArg q3_normalized, float t) noexcept
 クォータニオンのsquad(spherical quadrangle interpolation)を行います。 [詳解]
 
static void SquadSetup (SimdQuaternion *a, SimdQuaternion *b, SimdQuaternion *c, SimdQuaternionArg q0, SimdQuaternionArg q1, SimdQuaternionArg q2, SimdQuaternionArg q3) noexcept
 クォータニオンのsquad(spherical quadrangle interpolation)のためのクォータニオンを計算します。 [詳解]
 
static SimdQuaternion BaryCentric (SimdQuaternionArg q0, SimdQuaternionArg q1, SimdQuaternionArg q2, float f, float g) noexcept
 クォータニオンの重心座標を返します。 [詳解]
 

詳解

クォータニオンを扱う関数が集められたクラスです。

説明
レーン0-2にクォータニオンの虚部(x, y, z)が格納され、レーン3に実部が格納されます。
このクラスのメンバは全て静的関数で、クラスをインスタンス化することはできません。

SimdQuaternion.h12 行目に定義があります。

関数詳解

§ BaryCentric()

nn::nlib::simd::Quaternion::BaryCentric ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1,
SimdQuaternionArg  q2,
float  f,
float  g 
)
staticnoexcept

クォータニオンの重心座標を返します。

引数
[in]q0正規化されたクォータニオン
[in]q1正規化されたクォータニオン
[in]q2正規化されたクォータニオン
[in]f補間係数
[in]g補間係数
戻り値
クォータニオンの重心座標

§ CmpEq()

nn::nlib::simd::Quaternion::CmpEq ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1 
)
staticnoexcept

クォータニオンが等しいかどうかを検証します。

引数
[in]q0クォータニオン
[in]q1クォータニオン
戻り値
q0q1 が等しければtrue, そうでなければfalse

§ CmpNe()

nn::nlib::simd::Quaternion::CmpNe ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1 
)
staticnoexcept

クォータニオンが等しくないかどうかを検証します。

引数
[in]q0クォータニオン
[in]q1クォータニオン
戻り値
q0q1 が等しくなければtrue, 等しければfalse

§ Dot()

nn::nlib::simd::Quaternion::Dot ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1 
)
staticnoexcept

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

引数
[in]q0クォータニオン
[in]q1クォータニオン
戻り値
各レーンに内積が格納されます。

§ Exp()

nn::nlib::simd::Quaternion::Exp ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンの指数を計算します。

引数
[in]qクォータニオン。計算においてw要素は無視されます。
戻り値
q の指数

§ FromRotationAxisAndSinCos()

nn::nlib::simd::Quaternion::FromRotationAxisAndSinCos ( SimdVectorArg  axis_normalized,
float  sin_half_rad,
float  cos_half_rad 
)
staticnoexcept

軸と回転角(の半分のsin/cos)からクォータニオンを計算します。

引数
[in]axis_normalized正規化された回転軸3Dベクトル
[in]sin_half_rad回転角をradとした場合、sin(rad / 2)を渡します
[in]cos_half_rad回転角をradとした場合、cos(rad / 2)を渡します
戻り値
回転を表現するクォータニオン

§ FromRotationMatrix()

nn::nlib::simd::Quaternion::FromRotationMatrix ( SimdMatrixArg  m)
staticnoexcept

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

引数
[in]m回転行列
戻り値
回転を表現するクォータニオン

§ FromRotationZXY()

nn::nlib::simd::Quaternion::FromRotationZXY ( SimdVectorArg  sin_half_xyz,
SimdVectorArg  cos_half_xyz 
)
staticnoexcept

ZXY軸それぞれの回転角(の半分のsin/cos)からクォータニオンを計算します。

引数
[in]sin_half_xyz3次元ベクトル(sin(rad_x/2), sin(rad_y/2), sin(rad_z/2))
[in]cos_half_xyz3次元ベクトル(cos(rad_x/2), cos(rad_y/2), cos(rad_z/2))
戻り値
回転を表現するクォータニオン
説明
回転の順番はZ軸(Roll), X軸(Pitch), Y軸(Yaw)です。

§ Inverse()

nn::nlib::simd::Quaternion::Inverse ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンの逆数を計算します。

引数
[in]qクォータニオン
戻り値
クォータニオンの逆数

§ IsIdentity()

nn::nlib::simd::Quaternion::IsIdentity ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンが単位クォータニオンであるかを検証します。

引数
[in]qクォータニオン
戻り値
クォータニオンが単位クォータニオンならばtrue, そうでなければfalse

§ IsInfinite()

nn::nlib::simd::Quaternion::IsInfinite ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンが無限大の要素を持つかを検証します。

引数
[in]qクォータニオン
戻り値
クォータニオンが無限大の要素を持つならばtrue, そうでなければfalse

§ IsNaN()

nn::nlib::simd::Quaternion::IsNaN ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンが非数の要素を持つかを検証します。

引数
[in]qクォータニオン
戻り値
クォータニオンが非数の要素を持つならばtrue, そうでなければfalse

§ Length()

nn::nlib::simd::Quaternion::Length ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンの大きさを返します。

引数
[in]qクォータニオン
戻り値
各レーンにクォータニオンの大きさが格納されます。

§ LengthSq()

nn::nlib::simd::Quaternion::LengthSq ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンの大きさの2乗を返します。

引数
[in]qクォータニオン
戻り値
各レーンにクォータニオンの大きさの2乗が格納されます。

§ Ln()

nn::nlib::simd::Quaternion::Ln ( SimdQuaternionArg  q_normalized)
staticnoexcept

正規化されたクォータニオンの自然対数を計算します。

引数
[in]q_normalized正規化されたクォータニオン
戻り値
q_normalized の自然対数

§ Mult()

nn::nlib::simd::Quaternion::Mult ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1 
)
staticnoexcept

クオータニオンの乗算を計算します。

引数
[in]q0クォータニオン
[in]q1クォータニオン
戻り値
q1 * q0 が返されます(typoではありません)。
説明
計算結果は回転q0 の後に回転q1 を合成するクォータニオンに相当します。
以下に擬似コードを示します。
vector v = { q1.w, q1.x, q1.y, q1.z };
matrix m;
m.row[0] = { q0.x, q0.y, q0.z, q0.w };
m.row[1] = { q0.w, -q0.z, q0.y, -q0.x };
m.row[2] = { q0.z, q0.w, -q0.x, -q0.y };
m.row[3] = { -q0.y, q0.x, q0.w, -q0.z };
return v * m;

§ Normalize()

nn::nlib::simd::Quaternion::Normalize ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンを正規化します。

引数
[in]qクォータニオン
戻り値
正規化されたクォータニオン

§ NormalizeEst()

nn::nlib::simd::Quaternion::NormalizeEst ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンを相対的に低い精度で正規化します。

引数
[in]qクォータニオン
戻り値
正規化されたクォータニオン

§ RecpLength()

nn::nlib::simd::Quaternion::RecpLength ( SimdQuaternionArg  q)
staticnoexcept

クォータニオンの大きさの逆数を返します。

引数
[in]qクォータニオン
戻り値
各レーンにクォータニオンの大きさの逆数が格納されます。

§ Slerp()

nn::nlib::simd::Quaternion::Slerp ( SimdQuaternionArg  q0_normalized,
SimdQuaternionArg  q1_normalized,
float  t 
)
staticnoexcept

クォータニオンの球面線形補間を行います。

引数
[in]q0_normalized正規化されたクォータニオン
[in]q1_normalized正規化されたクォータニオン
[in]t補間係数
戻り値
補間されたクォータニオン
説明
t が0の場合q0_normalized を返し、1の場合q1_normalized を返します。

§ Squad()

nn::nlib::simd::Quaternion::Squad ( SimdQuaternionArg  q0_normalized,
SimdQuaternionArg  q1_normalized,
SimdQuaternionArg  q2_normalized,
SimdQuaternionArg  q3_normalized,
float  t 
)
staticnoexcept

クォータニオンのsquad(spherical quadrangle interpolation)を行います。

引数
[in]q0_normalized正規化されたクォータニオン
[in]q1_normalized正規化されたクォータニオン
[in]q2_normalized正規化されたクォータニオン
[in]q3_normalized正規化されたクォータニオン
[in]t補間係数
戻り値
補間されたクォータニオン

§ SquadSetup()

nn::nlib::simd::Quaternion::SquadSetup ( SimdQuaternion a,
SimdQuaternion b,
SimdQuaternion c,
SimdQuaternionArg  q0,
SimdQuaternionArg  q1,
SimdQuaternionArg  q2,
SimdQuaternionArg  q3 
)
staticnoexcept

クォータニオンのsquad(spherical quadrangle interpolation)のためのクォータニオンを計算します。

引数
[out]a出力クォータニオン
[out]b出力クォータニオン
[out]c出力クォータニオン
[in]q0入力クォータニオン
[in]q1入力クォータニオン
[in]q2入力クォータニオン
[in]q3入力クォータニオン
説明
補間するクォータニオンが4つよりも多い場合に利用します。
計算結果は、以下のようにして補間に利用します。
q = Quaternion::Squad(q1, *a, *b, *c, t);

§ ToAxisAngle()

nn::nlib::simd::Quaternion::ToAxisAngle ( float *  rad,
SimdQuaternion  q 
)
staticnoexcept

クォータニオンから回転軸のベクトルと回転角のラジアンを計算します。

引数
[out]rad回転角
[in]qクォータニオン
戻り値
回転軸となる3次元ベクトル

このクラス詳解は次のファイルから抽出されました: