FineKernelToolKit 4.2.13
読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 公開変数類 | 静的公開変数類 | 全メンバ一覧
FK::fk_Vector クラス

3次元ベクトルを管理するクラス [詳解]

#include <FK/Vector.h>

+ FK::fk_Vector の継承関係図

公開メンバ関数

 fk_Vector (double x=0.0, double y=0.0, double z=0.0)
 コンストラクタ
 
 fk_Vector (const fk_Vector &)
 コピーコンストラクタ
 
 fk_Vector (const fk_FVector &)
 コピーコンストラクタ
 
virtual ~fk_Vector ()
 デストラクタ
 
単項演算子
fk_Vectoroperator- (void) const
 単項マイナス演算子
 
比較演算子
bool operator== (const fk_Vector &) const
 同値比較演算子
 
bool operator!= (const fk_Vector &) const
 異値比較演算子
 
bool operator> (const fk_Vector &) const
 右不等号演算子
 
bool operator< (const fk_Vector &) const
 左不等号演算子
 
bool operator>= (const fk_Vector &) const
 等価右不等号演算子
 
bool operator<= (const fk_Vector &) const
 等価左不等号演算子
 
代入演算子
fk_Vectoroperator= (const fk_Vector &)
 単純代入演算子
 
fk_Vectoroperator= (const fk_FVector &)
 fk_FVector 型からの単純代入演算子
 
fk_Vectoroperator*= (double)
 実数積代入演算子
 
fk_Vectoroperator/= (double)
 実数商代入演算子
 
fk_Vectoroperator+= (const fk_Vector &)
 単項和代入演算子
 
fk_Vectoroperator-= (const fk_Vector &)
 単項差代入演算子
 
fk_Vectoroperator^= (const fk_Vector &)
 単項外積代入演算子
 
fk_Vectoroperator*= (const fk_Matrix &)
 行列変換代入演算子1
 
fk_Vectoroperator*= (const fk_OrthoMatrix &)
 行列変換代入演算子2
 
メンバ関数
virtual void set (double x, double y, double z=0.0)
 成分設定関数1
 
double dist (void) const
 ベクトル長さ算出関数
 
double dist2 (void) const
 ベクトル長さ平方算出関数
 
bool normalize (void)
 正規化関数
 
virtual void init (void)
 初期化関数
 
bool isZero (void) const
 零ベクトル判定関数
 
fk_Vector proj (const fk_Vector &Q) const
 射影ベクトル算出関数
 
fk_Vector perp (const fk_Vector &Q) const
 射影垂直成分ベクトル算出関数
 

公開変数類

double x
 x成分
 
double y
 y成分
 
double z
 z成分
 

静的公開変数類

static constexpr double VECTOREPS = 1.0e-12
 ベクトル演算誤差基準値
 
static constexpr double MATRIXEPS = 1.0e-12
 行列演算用誤差1
 
static constexpr double MATRIXEPS2 = 1.0e-16
 行列演算用誤差2
 

詳解

3次元ベクトルを管理するクラス

このクラスは、3次元ベクトルの様々な機能を提供します。 成分は double 型によって格納されています。 このクラスでは、内積値や外積ベクトル、ノルム算出などの ベクトルに関する基本的な演算が利用できます。 また、 fk_Matrix との組み合わせによる行列演算も可能です。

fk_Vector にはもう一つ、 多くの3次元ベクトル情報のやりとりに利用されるという重要な側面があります。 そのため、形状操作やモデル操作など多岐に渡って利用する機会があります。

4次元のベクトルを扱う場合は fk_HVector を参照して下さい。 成分を float 型として格納する場合は fk_FVector を参照して下さい。 任意次元のベクトルを扱う場合は fk_GenVector を参照して下さい。

参照
fk_Matrix, fk_HVector, fk_FVector, fk_GenVector

構築子と解体子

◆ fk_Vector() [1/3]

FK::fk_Vector::fk_Vector ( double  x = 0.0,
double  y = 0.0,
double  z = 0.0 
)
explicit

コンストラクタ

引数
[in]xx成分
[in]yy成分
[in]zz成分

◆ fk_Vector() [2/3]

FK::fk_Vector::fk_Vector ( const fk_Vector )

コピーコンストラクタ

◆ fk_Vector() [3/3]

FK::fk_Vector::fk_Vector ( const fk_FVector )

コピーコンストラクタ

◆ ~fk_Vector()

virtual FK::fk_Vector::~fk_Vector ( )
inlinevirtual

デストラクタ

関数詳解

◆ operator-()

fk_Vector & FK::fk_Vector::operator- ( void  ) const

単項マイナス演算子

fk_Vector では、以下のように記述することで、v2 に -v1 を代入できます。

v2 = -v1;

◆ operator==()

bool FK::fk_Vector::operator== ( const fk_Vector ) const

同値比較演算子

fk_Vector では、以下のように記述することで、 v1 と v2 が等しいかどうかを判断できます。

if(v1 == v2) {
    :
    :
}

ここでの比較は、ある程度の計算誤差を許容します。

◆ operator!=()

bool FK::fk_Vector::operator!= ( const fk_Vector ) const

異値比較演算子

fk_Vector では、以下のように記述することで、 v1 と v2 が等しくないかどうかを判断できます。

if(v1 != v2) {
    :
    :
}

ここでの比較は、ある程度の計算誤差を許容します。

◆ operator>()

bool FK::fk_Vector::operator> ( const fk_Vector ) const

右不等号演算子

この演算子では、以下のように処理を行います。

  1. x成分において、左が大きい場合は真、右が大きい場合は偽とする。 x成分が fk_Vector::VECTOREPS による誤差許容の上で等しい場合、次の処理に移る。
  2. y成分において、左が大きい場合は真、右が大きい場合は偽とする。 y成分が fk_Vector::VECTOREPS による誤差許容の上で等しい場合、次の処理に移る。
  3. z成分において、左が大きい場合は真、右が大きい場合は偽とする。 z成分が fk_Vector::VECTOREPS による誤差許容の上で等しい場合、偽とする。

この演算子は数学的な意味はありませんが、整列化の際に有用となります。

◆ operator<()

bool FK::fk_Vector::operator< ( const fk_Vector ) const

左不等号演算子

この演算子では、以下のように処理を行います。

  1. x成分において、右が大きい場合は真、左が大きい場合は偽とする。 x成分が fk_Vector::VECTOREPS による誤差許容の上で等しい場合、次の処理に移る。
  2. y成分において、右が大きい場合は真、左が大きい場合は偽とする。 y成分が fk_Vector::VECTOREPS による誤差許容の上で等しい場合、次の処理に移る。
  3. z成分において、右が大きい場合は真、左が大きい場合は偽とする。 z成分が fk_Vector::VECTOREPS による誤差許容の上で等しい場合、偽とする。

この演算子は数学的な意味はありませんが、整列化の際に有用となります。

◆ operator>=()

bool FK::fk_Vector::operator>= ( const fk_Vector ) const

等価右不等号演算子

右不等号演算子とほぼ同一ですが、全ての成分が等しい場合には真を返します。

◆ operator<=()

bool FK::fk_Vector::operator<= ( const fk_Vector ) const

等価左不等号演算子

左不等号演算子とほぼ同一ですが、全ての成分が等しい場合には真を返します。

◆ operator=() [1/2]

fk_Vector & FK::fk_Vector::operator= ( const fk_Vector )

単純代入演算子

◆ operator=() [2/2]

fk_Vector & FK::fk_Vector::operator= ( const fk_FVector )

fk_FVector 型からの単純代入演算子

◆ operator*=() [1/3]

fk_Vector & FK::fk_Vector::operator*= ( double  )

実数積代入演算子

以下のコードは、V を d 倍します。 V は fk_Vector 型の変数、d は double 型の変数です。

V *= d;

d は変数でなく数値でも構いません。

V *= 2.0;

◆ operator/=()

fk_Vector & FK::fk_Vector::operator/= ( double  )

実数商代入演算子

以下のコードは、V を 1/d 倍します。 V は fk_Vector 型の変数、d は double 型の変数です。

V /= d;

d は変数でなく数値でも構いません。

V /= 2.0;

なお、d が 0 であった場合は V の値を変更しません。

◆ operator+=()

fk_Vector & FK::fk_Vector::operator+= ( const fk_Vector )

単項和代入演算子

以下のコードは、V1 に V2 を追加します。 V1、V2 はいずれも fk_Vector 型の変数です。

V1 += V2;

上記コードは、以下のコードと同義です。

V1 = V1 + V2;

◆ operator-=()

fk_Vector & FK::fk_Vector::operator-= ( const fk_Vector )

単項差代入演算子

以下のコードは、V1 から V2 を引きます。 V1、V2 はいずれも fk_Vector 型の変数です。

V1 -= V2;

上記コードは、以下のコードと同義です。

V1 = V1 - V2;

◆ operator^=()

fk_Vector & FK::fk_Vector::operator^= ( const fk_Vector )

単項外積代入演算子

以下のコードは、V1 と V2 の外積ベクトルを V1 に代入します。 V1、V2 はいずれも fk_Vector 型の変数です。

V1 ^= V2;

上記コードは、以下のコードと同義です。

V1 = V1 ^ V2;

◆ operator*=() [2/3]

fk_Vector & FK::fk_Vector::operator*= ( const fk_Matrix )

行列変換代入演算子1

以下のコードは、V を M によって変換した値を代入します。 V は fk_Vector 型の変数、M は fk_Matrix 型の変数です。

V *= M;

上記コードは、以下のコードと同義です。

V = M * V;

演算の際、fk_Vector は fk_HVector に変換されます。 変換の際の同次座標は 1 に設定されます。

◆ operator*=() [3/3]

fk_Vector & FK::fk_Vector::operator*= ( const fk_OrthoMatrix )

行列変換代入演算子2

以下のコードは、V を M によって変換した値を代入します。 V は fk_Vector 型の変数、M は fk_OrthoMatrix 型の変数です。

V *= M;

上記コードは、以下のコードと同義です。

V = M * V;

演算の際、fk_Vector は fk_HVector に変換されます。 変換の際の同次座標は 1 に設定されます。

◆ set()

virtual void FK::fk_Vector::set ( double  x,
double  y,
double  z = 0.0 
)
virtual

成分設定関数1

各成分を設定します。

引数
[in]xx成分の値
[in]yy成分の値
[in]zz成分の値

FK::fk_HVectorで再実装されています。

◆ dist()

double FK::fk_Vector::dist ( void  ) const

ベクトル長さ算出関数

ベクトルの長さ(ノルム)を返します。 ベクトル \( \mathbf{V} \) の長さは以下の式で算出されます。

\[ |\mathbf{V}| = \sqrt{{V_x}^2 + {V_y}^2 + {V_z}^2} \]

戻り値
ベクトルの長さ

◆ dist2()

double FK::fk_Vector::dist2 ( void  ) const

ベクトル長さ平方算出関数

ベクトルの長さ(ノルム)の2乗の値を返します。 \( \mathbf{V} \) の長さの2乗は以下の式で算出されます。

\[ |\mathbf{V}|^2 = {V_x}^2 + {V_y}^2 + {V_z}^2 \]

平方根演算がない分、 dist() と比べて若干高速です。

戻り値
ベクトルの長さの平方

◆ normalize()

bool FK::fk_Vector::normalize ( void  )

正規化関数

ベクトルの正規化を行います。 正規化とは、ベクトル \( \mathbf{V} \) に対し、 以下の演算で \( \mathbf{V}' \) を求めることです。

\[ \mathbf{V}' = \frac{\mathbf{V}}{|\mathbf{V}|} \]

戻り値
成功した場合 true を、失敗した場合 false を返します。 「失敗」は、元のベクトルが零ベクトルである場合に限ります。
参照
dist()

◆ init()

virtual void FK::fk_Vector::init ( void  )
virtual

初期化関数

零ベクトルに初期化を行います。

FK::fk_HVectorで再実装されています。

◆ isZero()

bool FK::fk_Vector::isZero ( void  ) const

零ベクトル判定関数

戻り値
零ベクトルである場合 true を、そうでない場合 false を返します。

◆ proj()

fk_Vector FK::fk_Vector::proj ( const fk_Vector Q) const

射影ベクトル算出関数

この関数は、元ベクトルから引数ベクトルに対する射影ベクトルを算出します。 元ベクトルを \( \mathbf{P} \), 引数ベクトルを \( \mathbf{Q} \), 射影ベクトルを \( \mathbf{P}' \) とすると、 以下の式で算出されます。

\[ \mathbf{P}' = \frac{\mathbf{P}\cdot\mathbf{Q}} {|\mathbf{Q}|^2} \mathbf{Q} \]

図による解説は、ユーザーズマニュアルの「ベクトルの射影」項目を参照して下さい。

引数
[in]Q射影基準ベクトル
戻り値
射影ベクトル
参照
perp(), dist(), dist2()

◆ perp()

fk_Vector FK::fk_Vector::perp ( const fk_Vector Q) const

射影垂直成分ベクトル算出関数

この関数は、元ベクトルから引数ベクトルに対する射影の垂直成分ベクトルを算出します。 これは、元ベクトルと proj() で求められる射影ベクトルの差分ベクトルと同義です。 図による解説は、ユーザーズマニュアルの「ベクトルの射影」項目を参照して下さい。

引数
[in]Q射影基準ベクトル
戻り値
射影垂直成分ベクトル
参照
proj()

メンバ詳解

◆ VECTOREPS

constexpr double FK::fk_Vector::VECTOREPS = 1.0e-12
staticconstexpr

ベクトル演算誤差基準値

◆ MATRIXEPS

constexpr double FK::fk_Vector::MATRIXEPS = 1.0e-12
staticconstexpr

行列演算用誤差1

◆ MATRIXEPS2

constexpr double FK::fk_Vector::MATRIXEPS2 = 1.0e-16
staticconstexpr

行列演算用誤差2

◆ x

double FK::fk_Vector::x

x成分

◆ y

double FK::fk_Vector::y

y成分

◆ z

double FK::fk_Vector::z

z成分