FineKernelToolKit  2.8.10
Public メソッド | Public 変数
クラス fk_Vector

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

+ fk_Vectorに対する継承グラフ

すべてのメンバ一覧

Public メソッド

 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_Matrix &)
 行列変換代入演算子1
fk_Vectoroperator*= (const fk_OrthoMatrix &)
 行列変換代入演算子2
メンバ関数
virtual void set (double x, double y, double z=0.0)
 成分設定関数
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
 射影垂直成分ベクトル算出関数

Public 変数

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

フレンド

二項演算子
double operator* (const fk_Vector &, const fk_Vector &)
 内積二項演算子
fk_Vector operator+ (const fk_Vector &, const fk_Vector &)
 ベクトル和二項演算子
fk_Vector operator- (const fk_Vector &, const fk_Vector &)
 ベクトル差二項演算子
fk_Vector operator* (const fk_Vector &, double)
 実数倍二項演算子1
fk_Vector operator* (double, const fk_Vector &)
 実数倍二項演算子2
fk_Vector operator/ (const fk_Vector &, double)
 実数商二項演算子
fk_Vector operator^ (const fk_Vector &, const fk_Vector &)
 外積二項演算子

説明

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::fk_Vector ( double  x = 0.0,
double  y = 0.0,
double  z = 0.0 
)

コンストラクタ

引数:
[in]xx成分
[in]yy成分
[in]zz成分
fk_Vector::fk_Vector ( const fk_Vector )

コピーコンストラクタ

fk_Vector::fk_Vector ( const fk_FVector )

コピーコンストラクタ

virtual fk_Vector::~fk_Vector ( ) [inline, virtual]

デストラクタ


関数

fk_Vector& fk_Vector::operator- ( void  ) const

単項マイナス演算子

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

    v2 = -v1;
bool fk_Vector::operator== ( const fk_Vector ) const

同値比較演算子

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

    if(v1 == v2) {
        :
        :
    }

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

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

異値比較演算子

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

    if(v1 != v2) {
        :
        :
    }

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

bool fk_Vector::operator> ( const fk_Vector ) const

右不等号演算子

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

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

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

bool fk_Vector::operator< ( const fk_Vector ) const

左不等号演算子

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

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

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

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

等価右不等号演算子

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

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

等価左不等号演算子

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

fk_Vector& fk_Vector::operator= ( const fk_Vector )

単純代入演算子

fk_HVectorで再定義されています。

fk_Vector& fk_Vector::operator= ( const fk_FVector )

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

fk_Vector& fk_Vector::operator*= ( double  )

実数積代入演算子

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

    V *= d;

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

    V *= 2.0;
fk_Vector& fk_Vector::operator/= ( double  )

実数商代入演算子

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

    V /= d;

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

    V /= 2.0;

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

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

単項和代入演算子

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

    V1 += V2;

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

    V1 = V1 + V2;
fk_Vector& fk_Vector::operator-= ( const fk_Vector )

単項差代入演算子

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

    V1 -= V2;

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

    V1 = V1 - V2;
fk_Vector& 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 に設定されます。

fk_HVectorで再定義されています。

fk_Vector& 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 に設定されます。

fk_HVectorで再定義されています。

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

成分設定関数

各成分を設定します。

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

fk_HVectorで再定義されています。

double fk_Vector::dist ( void  ) const

ベクトル長さ算出関数

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

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

戻り値:
ベクトルの長さ
double fk_Vector::dist2 ( void  ) const

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

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

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

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

戻り値:
ベクトルの長さの平方
bool fk_Vector::normalize ( void  )

正規化関数

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

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

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

初期化関数

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

fk_HVectorで再定義されています。

bool fk_Vector::isZero ( void  ) const

零ベクトル判定関数

戻り値:
零ベクトルである場合 true を、そうでない場合 false を返します。
fk_Vector 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()
fk_Vector fk_Vector::perp ( const fk_Vector Q) const

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

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

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

フレンドと関連する関数

double operator* ( const fk_Vector ,
const fk_Vector  
) [friend]

内積二項演算子

3次元ベクトル $ \mathbf{P} $$ \mathbf{Q} $ の内積値(スカラー積)は、以下のように定義されます。

\[ \mathbf{P}\cdot\mathbf{Q} = P_xQ_x + P_yQ_y + P_zQ_z \]

これを得るには、以下のように記述します。 P, Q はともに fk_Vector 型の変数で、d は double 型の変数です。

    d = P * Q;

なお、内積は交換法則が成り立ちます。

fk_Vector operator+ ( const fk_Vector ,
const fk_Vector  
) [friend]

ベクトル和二項演算子

ベクトル V1 と V2 の和を得るには、以下のように記述します。 V1, V2, V3 はいずれも fk_Vector 型の変数です。

    V3 = V1 + V2;

なお、和演算は交換法則が成り立ちます。

fk_Vector operator- ( const fk_Vector ,
const fk_Vector  
) [friend]

ベクトル差二項演算子

ベクトル V1 と V2 の差を得るには、以下のように記述します。 V1, V2, V3 はいずれも fk_Vector 型の変数です。

    V3 = V1 - V2;

なお、差演算は交換法則が成り立ちません。

fk_Vector operator* ( const fk_Vector ,
double   
) [friend]

実数倍二項演算子1

ベクトル V1 のスカラー倍ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_Vector 型の変数で、d は double 型の変数です。

    V2 = V1 * d;

なお、ベクトルと実数の順番は逆でも構いません。

fk_Vector operator* ( double  ,
const fk_Vector  
) [friend]

実数倍二項演算子2

ベクトル V1 のスカラー倍ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_Vector 型の変数で、d は double 型の変数です。

    V2 = d * V1;

なお、ベクトルと実数の順番は逆でも構いません。

fk_Vector operator/ ( const fk_Vector ,
double   
) [friend]

実数商二項演算子

ベクトル V1 のスカラー商ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_Vector 型の変数で、d は double 型の変数です。

    V2 = V1/d;
fk_Vector operator^ ( const fk_Vector ,
const fk_Vector  
) [friend]

外積二項演算子

3次元ベクトル $ \mathbf{P} $$ \mathbf{Q} $ の外積ベクトル(ベクトル積)は、以下のように定義されます。

\[ \mathbf{P} \times \mathbf{Q} = (P_yQ_z - P_zQ_y, \; P_zQ_x - P_xQ_z, \; P_xQ_y - P_yQ_x) \]

これを得るには、以下のように記述します。 P,Q,R はいずれも fk_Vector 型の変数です。

    R = P ^ Q;

なお、外積は以下のような法則があります。

  • $\mathbf{P}$, $\mathbf{Q}$ が平行でない場合、 上記の $\mathbf{R}$ は、 $\mathbf{P}$, $\mathbf{Q}$ の双方と垂直である。
  • $\mathbf{P}$, $\mathbf{Q}$ が平行な場合、 $\mathbf{R}$ は零ベクトルとなる。
  • $ (\mathbf{P} \times \mathbf{Q}) = -(\mathbf{Q} \times \mathbf{P}) $ である。
    覚え書き:
    ここで演算子として採用されている「^」は、 C++ の仕様上あまり演算子としての優先度が高くありません。 そのため、括弧を適切に使用しないと本来の意図と異なる結果を生じるおそれがあります。

変数

double fk_Vector::x

x成分

double fk_Vector::y

y成分

double fk_Vector::z

z成分

 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義