FineKernelToolKit 2.9.0

- メインページ
- ネームスペース
- クラス
- ファイル

- 構成
- クラス階層
- 構成メンバ

全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
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_Vector & | operator- (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_Vector & | operator= (const fk_Vector &)
| 単純代入演算子 [詳細]
fk_Vector & | operator= (const fk_FVector &)
| fk_FVector 型からの単純代入演算子 [詳細]
fk_Vector & | operator*= (double)
| 実数積代入演算子 [詳細]
fk_Vector & | operator/= (double)
| 実数商代入演算子 [詳細]
fk_Vector & | operator+= (const fk_Vector &)
| 単項和代入演算子 [詳細]
fk_Vector & | operator-= (const fk_Vector &)
| 単項差代入演算子 [詳細]
fk_Vector & | operator*= (const fk_Matrix &)
| 行列変換代入演算子1 [詳細]
fk_Vector & | operator*= (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`
| ) |  |
| explicit

コンストラクタ

引数

  [in] | x | x成分
  [in] | y | y成分
  [in] | z | z成分

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

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

成分設定関数

各成分を設定します。

引数

  [in] | x | x成分の値
  [in] | y | y成分の値
  [in] | z | z成分の値

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

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

ベクトル長さ算出関数

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

戻り値
  ベクトルの長さ

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

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

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

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

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

bool fk_Vector::normalize | ( | void |  | ) |

正規化関数

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

戻り値
  成功した場合 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

射影ベクトル算出関数

この関数は、元ベクトルから引数ベクトルに対する射影ベクトルを算出します。 元ベクトルを , 引数ベクトルを , 射影ベクトルを とすると、 以下の式で算出されます。

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

引数

  [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次元ベクトル と の内積値(スカラー積)は、以下のように定義されます。

これを得るには、以下のように記述します。 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次元ベクトル と の外積ベクトル(ベクトル積)は、以下のように定義されます。

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

    R = P ^ Q;

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

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

## 変数

double fk_Vector::x

x成分

double fk_Vector::y

y成分

double fk_Vector::z

z成分