FineKernelToolKit 4.2.13
|
3次元ベクトルを管理するクラス [詳解]
#include <FK/Vector.h>
公開メンバ関数 | |
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_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) |
成分設定関数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 を参照して下さい。
|
explicit |
コンストラクタ
[in] | x | x成分 |
[in] | y | y成分 |
[in] | z | z成分 |
FK::fk_Vector::fk_Vector | ( | const fk_Vector & | ) |
コピーコンストラクタ
FK::fk_Vector::fk_Vector | ( | const fk_FVector & | ) |
コピーコンストラクタ
|
inlinevirtual |
デストラクタ
fk_Vector & FK::fk_Vector::operator- | ( | void | ) | const |
bool FK::fk_Vector::operator== | ( | const fk_Vector & | ) | const |
同値比較演算子
fk_Vector では、以下のように記述することで、 v1 と v2 が等しいかどうかを判断できます。
if(v1 == v2) { : : }
ここでの比較は、ある程度の計算誤差を許容します。
bool FK::fk_Vector::operator!= | ( | const fk_Vector & | ) | const |
異値比較演算子
fk_Vector では、以下のように記述することで、 v1 と v2 が等しくないかどうかを判断できます。
if(v1 != v2) { : : }
ここでの比較は、ある程度の計算誤差を許容します。
bool FK::fk_Vector::operator> | ( | const fk_Vector & | ) | const |
右不等号演算子
この演算子では、以下のように処理を行います。
この演算子は数学的な意味はありませんが、整列化の際に有用となります。
bool FK::fk_Vector::operator< | ( | const fk_Vector & | ) | const |
左不等号演算子
この演算子では、以下のように処理を行います。
この演算子は数学的な意味はありませんが、整列化の際に有用となります。
bool FK::fk_Vector::operator>= | ( | const fk_Vector & | ) | const |
等価右不等号演算子
右不等号演算子とほぼ同一ですが、全ての成分が等しい場合には真を返します。
bool FK::fk_Vector::operator<= | ( | const fk_Vector & | ) | const |
等価左不等号演算子
左不等号演算子とほぼ同一ですが、全ての成分が等しい場合には真を返します。
fk_Vector & FK::fk_Vector::operator= | ( | const fk_FVector & | ) |
fk_FVector 型からの単純代入演算子
fk_Vector & FK::fk_Vector::operator*= | ( | double | ) |
実数積代入演算子
以下のコードは、V を d 倍します。 V は fk_Vector 型の変数、d は double 型の変数です。
V *= d;
d は変数でなく数値でも構いません。
V *= 2.0;
fk_Vector & FK::fk_Vector::operator/= | ( | double | ) |
実数商代入演算子
以下のコードは、V を 1/d 倍します。 V は fk_Vector 型の変数、d は double 型の変数です。
V /= d;
d は変数でなく数値でも構いません。
V /= 2.0;
なお、d が 0 であった場合は V の値を変更しません。
単項和代入演算子
以下のコードは、V1 に V2 を追加します。 V1、V2 はいずれも fk_Vector 型の変数です。
V1 += V2;
上記コードは、以下のコードと同義です。
V1 = V1 + V2;
単項差代入演算子
以下のコードは、V1 から V2 を引きます。 V1、V2 はいずれも fk_Vector 型の変数です。
V1 -= V2;
上記コードは、以下のコードと同義です。
V1 = V1 - V2;
単項外積代入演算子
以下のコードは、V1 と V2 の外積ベクトルを V1 に代入します。 V1、V2 はいずれも fk_Vector 型の変数です。
V1 ^= V2;
上記コードは、以下のコードと同義です。
V1 = V1 ^ V2;
行列変換代入演算子1
以下のコードは、V を M によって変換した値を代入します。 V は fk_Vector 型の変数、M は fk_Matrix 型の変数です。
V *= M;
上記コードは、以下のコードと同義です。
V = M * V;
演算の際、fk_Vector は fk_HVector に変換されます。 変換の際の同次座標は 1 に設定されます。
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 に設定されます。
|
virtual |
double FK::fk_Vector::dist | ( | void | ) | const |
ベクトル長さ算出関数
ベクトルの長さ(ノルム)を返します。 ベクトル \( \mathbf{V} \) の長さは以下の式で算出されます。
\[ |\mathbf{V}| = \sqrt{{V_x}^2 + {V_y}^2 + {V_z}^2} \]
double FK::fk_Vector::dist2 | ( | void | ) | const |
ベクトル長さ平方算出関数
ベクトルの長さ(ノルム)の2乗の値を返します。 \( \mathbf{V} \) の長さの2乗は以下の式で算出されます。
\[ |\mathbf{V}|^2 = {V_x}^2 + {V_y}^2 + {V_z}^2 \]
平方根演算がない分、 dist() と比べて若干高速です。
bool FK::fk_Vector::normalize | ( | void | ) |
正規化関数
ベクトルの正規化を行います。 正規化とは、ベクトル \( \mathbf{V} \) に対し、 以下の演算で \( \mathbf{V}' \) を求めることです。
\[ \mathbf{V}' = \frac{\mathbf{V}}{|\mathbf{V}|} \]
|
virtual |
bool FK::fk_Vector::isZero | ( | void | ) | const |
零ベクトル判定関数
射影ベクトル算出関数
この関数は、元ベクトルから引数ベクトルに対する射影ベクトルを算出します。 元ベクトルを \( \mathbf{P} \), 引数ベクトルを \( \mathbf{Q} \), 射影ベクトルを \( \mathbf{P}' \) とすると、 以下の式で算出されます。
\[ \mathbf{P}' = \frac{\mathbf{P}\cdot\mathbf{Q}} {|\mathbf{Q}|^2} \mathbf{Q} \]
図による解説は、ユーザーズマニュアルの「ベクトルの射影」項目を参照して下さい。
[in] | Q | 射影基準ベクトル |
|
staticconstexpr |
ベクトル演算誤差基準値
|
staticconstexpr |
行列演算用誤差1
|
staticconstexpr |
行列演算用誤差2
double FK::fk_Vector::x |
x成分
double FK::fk_Vector::y |
y成分
double FK::fk_Vector::z |
z成分