WebCFace 2.5.2
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
Rotation Class Reference

3次元の回転を表すクラス More...

#include <webcface/transform.h>

Inheritance diagram for Rotation:
[legend]

Public Member Functions

 Rotation ()
 
std::array< double, 3 > rot () const
 3次元の回転をオイラー角として取得
 
double rot (std::size_t index) const
 3次元の回転をZYX順のオイラー角として取得
 
std::array< double, 3 > & rot ()
 3次元の回転をオイラー角として取得・変更
 
double & rot (std::size_t index)
 3次元の回転をZYX順のオイラー角として取得・変更
 
double rot2D () const
 2次元の回転を取得
 
std::array< double, 3 > rotEuler (AxisSequence axis=AxisSequence::ZYX) const
 3次元の回転をオイラー角として取得
 
const std::array< std::array< double, 3 >, 3 > & rotMatrix () const
 回転行列を取得
 
double rotMatrix (std::size_t row, std::size_t col) const
 回転行列の要素を取得
 
std::array< double, 4 > rotQuat () const
 クォータニオンとして取得
 
std::pair< std::array< double, 3 >, double > rotAxisAngle () const
 回転軸と角度として取得
 
Transform appliedTo (const Transform &target) const
 この回転をTransformに適用する
 
Transform operator* (const Transform &target) const
 この回転をTransformに適用する
 
Rotation appliedTo (const Rotation &target) const
 この回転をRotationに適用する
 
Rotation operator* (const Rotation &target) const
 この回転をRotationに適用する
 
Point appliedTo (const Point &target) const
 この回転をPointに適用する
 
Point operator* (const Point &target) const
 この回転をPointに適用する
 
Rotation inversed () const
 逆回転を取得
 
Rotationoperator*= (const Rotation &target)
 このRotationを別のRotationに適用した結果で置き換える
 
bool operator== (const Rotation &other) const
 
bool operator!= (const Rotation &other) const
 
bool operator== (const Transform &other) const
 
bool operator!= (const Transform &other) const
 

Static Public Member Functions

static std::array< std::array< double, 3 >, 3 > eulerToMatrix (const std::array< double, 3 > &rot, AxisSequence axis)
 オイラー角から回転行列への変換
 
static std::array< double, 3 > matrixToEuler (const std::array< std::array< double, 3 >, 3 > &rmat, AxisSequence axis)
 回転行列からオイラー角への変換
 
static std::array< std::array< double, 3 >, 3 > quaternionToMatrix (const std::array< double, 4 > &quat)
 クォータニオンから回転行列への変換
 
static std::array< double, 4 > matrixToQuaternion (const std::array< std::array< double, 3 >, 3 > &rmat)
 回転行列からクォータニオンへの変換
 
static std::array< double, 4 > axisAngleToQuaternion (const std::array< double, 3 > &axis, double angle)
 回転軸と角度からクォータニオンに変換
 
static std::pair< std::array< double, 3 >, double > quaternionToAxisAngle (const std::array< double, 4 > &quat)
 クォータニオンから回転軸と角度に変換
 

Protected Member Functions

 Rotation (const std::optional< std::array< double, 3 > > &rot, const std::optional< std::array< std::array< double, 3 >, 3 > > &rmat)
 

Protected Attributes

std::optional< std::array< double, 3 > > rot_
 
std::optional< std::array< std::array< double, 3 >, 3 > > rmat_
 

Friends

class Transform
 
Rotation rotFromEuler (const std::array< double, 3 > &rot, AxisSequence axis)
 回転をオイラー角から初期化
 
Rotation rotFromMatrix (const std::array< std::array< double, 3 >, 3 > &matrix)
 回転を回転行列から初期化
 

Detailed Description

3次元の回転を表すクラス

Since
ver2.5
  • 内部では z軸,y軸,x軸の順に回転させる系のオイラー角(Tait-Bryan角) または3x3回転行列(ver2.5〜) で保持している。
  • todo: 回転行列の代わりにクォータニオンを使うほうが良かったかも
  • 送受信時にはすべてこのzyxのオイラー角に変換される。
  • 2次元の回転を表すのにも使われ、 その場合オイラー角 rot() の最初の要素(=z軸周りの回転)を使って回転を表し、 残りの要素(x,y軸周りの回転)を0とする。
See also
AxisSequence

Constructor & Destructor Documentation

◆ Rotation() [1/2]

Rotation ( const std::optional< std::array< double, 3 > > &  rot,
const std::optional< std::array< std::array< double, 3 >, 3 > > &  rmat 
)
inlineprotected

◆ Rotation() [2/2]

Rotation ( )
inline

Member Function Documentation

◆ appliedTo() [1/3]

Point appliedTo ( const Point target) const

この回転をPointに適用する

Since
ver2.5
  • this * target と同じ。
  • thisもtargetも変更されない。

◆ appliedTo() [2/3]

Rotation appliedTo ( const Rotation target) const

この回転をRotationに適用する

Since
ver2.5
  • this * target と同じ。
  • thisもtargetも変更されない。

◆ appliedTo() [3/3]

Transform appliedTo ( const Transform target) const

この回転をTransformに適用する

Since
ver2.5
  • this * target と同じ。
  • thisもtargetも変更されない。

◆ axisAngleToQuaternion()

std::array< double, 4 > axisAngleToQuaternion ( const std::array< double, 3 > &  axis,
double  angle 
)
static

回転軸と角度からクォータニオンに変換

Since
ver2.5

◆ eulerToMatrix()

std::array< std::array< double, 3 >, 3 > eulerToMatrix ( const std::array< double, 3 > &  rot,
AxisSequence  axis 
)
static

オイラー角から回転行列への変換

Since
ver2.5

◆ inversed()

Rotation inversed ( ) const

逆回転を取得

Since
ver2.5

thisは変更されない。

◆ matrixToEuler()

std::array< double, 3 > matrixToEuler ( const std::array< std::array< double, 3 >, 3 > &  rmat,
AxisSequence  axis 
)
static

回転行列からオイラー角への変換

Since
ver2.5

◆ matrixToQuaternion()

std::array< double, 4 > matrixToQuaternion ( const std::array< std::array< double, 3 >, 3 > &  rmat)
static

回転行列からクォータニオンへの変換

Since
ver2.5

◆ operator!=() [1/2]

bool operator!= ( const Rotation other) const
inline

◆ operator!=() [2/2]

bool operator!= ( const Transform other) const
inline

◆ operator*() [1/3]

Point operator* ( const Point target) const

この回転をPointに適用する

Since
ver2.5
See also
appliedTo

◆ operator*() [2/3]

Rotation operator* ( const Rotation target) const

この回転をRotationに適用する

Since
ver2.5
See also
appliedTo

◆ operator*() [3/3]

Transform operator* ( const Transform target) const

この回転をTransformに適用する

Since
ver2.5
See also
appliedTo

◆ operator*=()

Rotation & operator*= ( const Rotation target)
inline

このRotationを別のRotationに適用した結果で置き換える

Since
ver2.5

this = this * target と同じ。

◆ operator==() [1/2]

bool operator== ( const Rotation other) const
  • 回転行列の各要素の差が 1e-8 未満のときtrue
  • Transformと比較することもできる (平行移動0のTransformとして扱う)

◆ operator==() [2/2]

bool operator== ( const Transform other) const

◆ quaternionToAxisAngle()

std::pair< std::array< double, 3 >, double > quaternionToAxisAngle ( const std::array< double, 4 > &  quat)
static

クォータニオンから回転軸と角度に変換

Since
ver2.5

◆ quaternionToMatrix()

std::array< std::array< double, 3 >, 3 > quaternionToMatrix ( const std::array< double, 4 > &  quat)
static

クォータニオンから回転行列への変換

Since
ver2.5

クォータニオンは w, x, y, z の順で表す。

◆ rot() [1/4]

std::array< double, 3 > & rot ( )
inline

3次元の回転をオイラー角として取得・変更

See also
rotEuler()
Deprecated:
ver2.5〜

◆ rot() [2/4]

std::array< double, 3 > rot ( ) const
inline

3次元の回転をオイラー角として取得

See also
rotEuler(), rot2D()
Deprecated:
ver2.5〜

◆ rot() [3/4]

double & rot ( std::size_t  index)
inline

3次元の回転をZYX順のオイラー角として取得・変更

Since
ver1.6
Parameters
index0→z, 1→y, 2→x
Deprecated:
ver2.5〜

◆ rot() [4/4]

double rot ( std::size_t  index) const
inline

3次元の回転をZYX順のオイラー角として取得

Since
ver1.6
Parameters
index0→z, 1→y, 2→x
Deprecated:
ver2.5〜

◆ rot2D()

double rot2D ( ) const
inline

2次元の回転を取得

Since
ver2.5

内部処理としては rotEuler()[0] と同じ。

◆ rotAxisAngle()

std::pair< std::array< double, 3 >, double > rotAxisAngle ( ) const
inline

回転軸と角度として取得

Since
ver2.5

◆ rotEuler()

std::array< double, 3 > rotEuler ( AxisSequence  axis = AxisSequence::ZYX) const
inline

3次元の回転をオイラー角として取得

Since
ver2.5
Parameters
axis回転軸の順序 (ver2.5〜) ver2.4までは z, y, x の順しか指定できない

◆ rotMatrix() [1/2]

const std::array< std::array< double, 3 >, 3 > & rotMatrix ( ) const
inline

回転行列を取得

Since
ver2.5

◆ rotMatrix() [2/2]

double rotMatrix ( std::size_t  row,
std::size_t  col 
) const
inline

回転行列の要素を取得

Since
ver2.5

◆ rotQuat()

std::array< double, 4 > rotQuat ( ) const
inline

クォータニオンとして取得

Since
ver2.5

Friends And Related Symbol Documentation

◆ rotFromEuler

Rotation rotFromEuler ( const std::array< double, 3 > &  rot,
AxisSequence  axis = AxisSequence::ZYX 
)
friend

回転をオイラー角から初期化

Since
ver2.5
Parameters
rotオイラー角 (内的回転の順の3パラメーター)
axis回転軸の順序

◆ rotFromMatrix

Rotation rotFromMatrix ( const std::array< std::array< double, 3 >, 3 > &  matrix)
friend

回転を回転行列から初期化

Since
ver2.5
Parameters
posx, y, z 座標
rotMatrix回転行列
Todo:
Eigenの配列とか生ポインタとか? 他の型から行列の値を渡せると良い?

◆ Transform

friend class Transform
friend

Member Data Documentation

◆ rmat_

std::optional<std::array<std::array<double, 3>, 3> > rmat_
mutableprotected

◆ rot_

std::optional<std::array<double, 3> > rot_
mutableprotected

The documentation for this class was generated from the following files: