Springhead
An open source physics engine for virtual reality, haptics and motion generation.
クラス テンプレート TQuaternion< ET >

Quaternion/4元数.3x3行列の代わりに回転を表すために使える. 4変数で済む.補間や微分・積分がやりやすい.
TVec3との掛け算は,回転変換でオーバーロードされている.

#include <TQuaternion.h>

TQuaternion< ET >に対する継承グラフ

Public 型

typedef TVecDesc< TQuaternion
< ET >, ET > 
desc
 
typedef PTM::TVectorBase< 4, descbase_type
 
typedef PTM::TSubVector< 3, descvector_type
 3次元の部分ベクトル
 
- Public 型 inherited from VectorImp< TVecDesc< TQuaternion< ET >, ET > >
typedef TVecDesc< TQuaternion
< ET >, ET > 
desc
 
typedef TYPENAME desc::exp_type exp_type
 
typedef TYPENAME desc::ret_type ret_type
 
typedef TYPENAME desc::element_type element_type
 
typedef TYPENAME desc::zero zero
 

Public メソッド

 DEF_TVECTOR_BASIC_MEMBER (TQuaternion)
 継承されない基本的なメンバの定義. [詳細]
 
ET & item_impl (size_t i)
 要素のアクセス
 
const ET & item_impl (size_t i) const
 要素のアクセス
 
size_t stride_impl () const
 ストライド
 
void Conjugate ()
 共役
 
TQuaternion Conjugated () const
 
TQuaternion Inv () const
 
 
template<class AM >
void FromMatrix (const AM &m)
 回転行列変換
 
template<class AM >
void ToMatrix (AM &mat) const
 
template<class VET >
void ToEuler (TVec3< VET > &v) const
 オイラー角(Y軸(heading), Z軸(attitude), X軸(bank)の順のオイラー角)へ変換
 
template<class VET >
void FromEuler (const TVec3< VET > &v)
 オイラー角(Y軸(heading), Z軸(attitude), X軸(bank)の順のオイラー角)から変換
 
void RotationArc (const TVec3< ET > &lhs, const TVec3< ET > &rhs)
 lhsを回転してrhsに一致させるクウォータニオン
 
void Euler (ET heading, ET attitude, ET bank)
 オイラー角で指定 (FromEulerとまったく同じ)
 
TVec3< ET > ToEuler () const
 
TQuaternion< ET > Derivative (const TVec3< ET > &w) const
 角速度からquaternionの時間微分を計算 [詳細]
 
TVec3< ET > AngularVelocity (const TQuaternion< ET > &qd) const
 クウォータニオンの時間微分から角速度を計算 [詳細]
 
変数アクセス
const element_type & W () const
 w成分
 
const element_type & X () const
 x成分
 
const element_type & Y () const
 y成分
 
const element_type & Z () const
 z成分
 
const vector_typeV () const
 
element_type & W ()
 z成分
 
element_type & X ()
 x成分
 
element_type & Y ()
 y成分
 
element_type & Z ()
 z成分
 
vector_typeV ()
 
TVec3< ET > RotationHalf ()
 回転ベクトル.0..PIの範囲で回転ベクトルを返す.
 
TVec3< ET > Rotation ()
 回転ベクトル2. 0..2PIの範囲で回転ベクトルを返す. angle から関数名変更
 
TVec3< ET > Axis () const
 回転軸
 
ET Theta () const
 回転角度 (angleに関数名を変更する予定) [詳細]
 
- Public メソッド inherited from TVectorBase< 4, TVecDesc< TQuaternion< ET >, ET > >
size_t size_impl () const
 
void resize_impl (size_t sz)
 
- Public メソッド inherited from VectorImp< TVecDesc< TQuaternion< ET >, ET > >
 VectorImp ()
 コンストラクタ
 
exp_type & exp ()
 実体の取得
 
const exp_type & exp () const
 
const element_type & item (size_t n) const
 n番目の要素を返す(基数は0).
 
element_type & item (size_t n)
 
size_t size () const
 サイズの取得
 
void resize (size_t sz)
 サイズの設定
 
void resize (size_t sz, const element_type v)
 サイズの設定とベクトルの要素を全てvにする
 
size_t stride () const
 ストライドの取得
 
TVectorSlice< SZ::SIZE,
SZ::STRIDE, desc > & 
t_slice (SZ)
 スライスを返す.テンプレート版 このベクトルのSZ::OFFSET要素から SZ::OFFSET + SZ::SIZE要素までの 部分ベクトルへの参照を返す. [詳細]
 
const TVectorSlice< SZ::SIZE,
SZ::STRIDE, desc > & 
t_slice (SZ) const
 
TVectorSlice< SZ::SIZE,
SZ::STRIDE, desc > & 
t_slice (size_t off, SZ)
 スライスを返す.サイズだけテンプレート版 このベクトルの off 要素から off + SZ::SIZE要素までの 部分ベクトルへの参照を返す. [詳細]
 
const TVectorSlice< SZ::SIZE,
SZ::STRIDE, desc > & 
t_slice (size_t off, SZ) const
 
TSubVector< SZ::SIZE, desc > & sub_vector (SZ)
 部分ベクトルを返す.テンプレート版
 
const TSubVector< SZ::SIZE,
desc > & 
sub_vector (SZ) const
 
TSubVector< SZ::SIZE, desc > & sub_vector (size_t off, SZ)
 部分ベクトルを返す.サイズだけテンプレート版
 
const TSubVector< SZ::SIZE,
desc > & 
sub_vector (size_t off, SZ) const
 
EVectorSlice< element_type > v_range (size_t off, size_t sz)
 部分ベクトルを返す.変数版
 
ConstEVectorSlice< element_type > v_range (size_t off, size_t sz) const
 
EVectorSlice< element_type > v_slice (size_t off, size_t sz, size_t str)
 ベクトルのスライスを返す.
 
ConstEVectorSlice< element_type > v_slice (size_t off, size_t sz, size_t str) const
 
void clear (const element_type v=zero(0))
 ベクトルの要素を全てvにする. [詳細]
 
void assign (const VectorImp< B > &b)
 代入(*this = b). [詳細]
 
void assign (const element_type *b)
 代入(*this = b). [詳細]
 
void add (const VectorImp< B > &b)
 加算(*this += b). [詳細]
 
void sub (const VectorImp< B > &b)
 減算(*this -= b). [詳細]
 
void multi (const element_type &b)
 定数倍(*this *= b). [詳細]
 
void div (const element_type &b)
 定数分の1(*this /= b). [詳細]
 
element_type dot (const VectorImp< B > &b) const
 内積(return *this * b). [詳細]
 
bool equal (const VectorImp< B > &b) const
 比較(return *this == b). [詳細]
 
void element_min (const VectorImp< B > &b)
 要素ごとの最小値(min(*this, b)). [詳細]
 
void element_max (const VectorImp< B > &b)
 要素ごとの最大値(max(*this, b)). [詳細]
 
element_type square () const
 ベクトルのノルム(大きさ)の2乗を返す.
 
element_type norm () const
 ベクトルのノルム(大きさ)を返す.
 
void unitize ()
 単位ベクトルにする.
 
void clip (const VectorImp< BD > &b, const VectorImp< ED > &e)
 クリッピングする(bとeを頂点とする矩形内に収まるようにする).
 
void print (std::ostream &os, const char *sep="( )") const
 表示. [詳細]
 
void input (T &is)
 表示. [詳細]
 
element_type & operator[] (I n)
 [] 演算子(基数は0).
 
const element_type & operator[] (I n) const
 [] 演算子(基数は0) (const 版).
 
 operator element_type * ()
 element_type * への変換
 
 operator const element_type * () const
 
ret_type operator* (element_type b) const
 ベクトルのスカラー倍(return this * b). [詳細]
 
ret_type operator/ (element_type b) const
 ベクトルのスカラー分の1(return this / b). [詳細]
 
ret_type operator+= (const VectorImp< BD > &b)
 += 演算子(*this = *this + b). [詳細]
 
ret_type operator-= (const VectorImp< BD > &b)
 -= 演算子(*this = *this - b) [詳細]
 
ret_type operator*= (T b)
 *= 演算子 (*this = *this * b) [詳細]
 
ret_type operator/= (T b)
 /= 演算子 (*this = 1/b * *this). [詳細]
 
ret_type operator- () const
 
ret_type unit () const
 単位ベクトルを返す.
 

Public 変数

union {
   ET   data [4]
 
   struct {
      ET   w
 
      ET   x
 
      ET   y
 
      ET   z
 
   } 
 
}; 
 

Protected メソッド

void set_default ()
 コンストラクタ
 
- Protected メソッド inherited from VectorImp< TVecDesc< TQuaternion< ET >, ET > >
void init_buffer ()
 バッファの初期化.何もしない.
 
void set_default ()
 デフォルトコンストラクタ
 

初期化・構築

 TQuaternion (element_type wi, element_type xi, element_type yi, element_type zi)
 コンストラクタ
 
template<class B >
void InitDirect (element_type a, const PTM::TVectorBase< 3, B > v)
 
template<class B >
void InitDirect (element_type a, const PTM::TVectorBase< 4, B > v)
 
static TQuaternion< ET > Rot (element_type angle, const TVec3< element_type > &axis)
 
static TQuaternion< ET > Rot (element_type angle, char axis)
 
static TQuaternion< ET > Rot (const TVec3< element_type > &rot)
 

Additional Inherited Members

- Static Public 変数 inherited from TVectorBase< 4, TVecDesc< TQuaternion< ET >, ET > >
static const size_t SIZE
 

関数

TVec3<ET> AngularVelocity ( const TQuaternion< ET > &  qd) const
inline
引数
qdquaternionの時間微分
戻り値
角速度

このquaternionとその時間微分qdから角速度wを計算する. ただしwは回転元(ワールド)座標系から見た回転先(ローカル)座標系の角速度を 回転元座標系で表わしたもの.

DEF_TVECTOR_BASIC_MEMBER ( TQuaternion< ET >  )
参照
::DEF_TVECTOR_BASIC_MEMBER
TQuaternion<ET> Derivative ( const TVec3< ET > &  w) const
inline
引数
w角速度

このquaternionと角速度wから,quaternionの時間微分を計算する. ただしwは回転元(ワールド)座標系から見た回転先(ローカル)座標系の角速度を 回転元座標系で表わしたもの.

ET Theta ( ) const
inline

数値誤差でWが1.0を上回るとエラーする場合がある


このクラスの説明は次のファイルから生成されました: