FineKernelToolKit 4.2.13
|
3次元ベクトルを管理するクラス [詳解]
#include <CLI/FK_CLI/include/Vector_CLI.h>
公開メンバ関数 | |
fk_Vector () | |
コンストラクタ1 | |
fk_Vector (double x, double y, double z) | |
コンストラクタ2 | |
fk_Vector (double x, double y) | |
コンストラクタ3 | |
fk_Vector (double x) | |
コンストラクタ | |
fk_Vector (fk_Vector^ V) | |
コンストラクタ3 | |
~fk_Vector () | |
bool | Equals (fk_Vector^ V) |
同値比較メソッド1 | |
virtual bool | Equals (Object^ V) override |
同値比較メソッド2 | |
String ^ | ToString () override |
文字列出力メソッド | |
void | Set (double x, double y, double z) |
成分設定メソッド1 | |
void | Set (double x, double y) |
成分設定メソッド2 | |
void | Set (double x) |
成分設定メソッド3 | |
double | Dist () |
ベクトル長さ算出メソッド | |
double | Dist2 () |
ベクトル長さ平方算出メソッド | |
bool | Normalize () |
正規化メソッド | |
bool | IsZero () |
零ベクトル判定メソッド | |
fk_Vector ^ | Proj (fk_Vector^ Q) |
射影ベクトル算出メソッド | |
fk_Vector ^ | Perp (fk_Vector^ Q) |
射影垂直成分ベクトル算出メソッド | |
void | Init (void) |
初期化メソッド | |
静的公開メンバ関数 | |
単項演算子 | |
static fk_Vector ^ | operator- (fk_Vector^) |
単項マイナス演算子 | |
二項演算子 | |
static double | operator* (fk_Vector^, fk_Vector^) |
内積二項演算子 | |
static fk_Vector ^ | operator+ (fk_Vector^, fk_Vector^) |
ベクトル和二項演算子 | |
static fk_Vector ^ | operator- (fk_Vector^, fk_Vector^) |
ベクトル差二項演算子 | |
static fk_Vector ^ | operator* (fk_Vector^, double) |
実数倍二項演算子1 | |
static fk_Vector ^ | operator* (double, fk_Vector^) |
実数倍二項演算子2 | |
static fk_Vector ^ | operator/ (fk_Vector^, double) |
実数商二項演算子 | |
static fk_Vector ^ | operator^ (fk_Vector^, fk_Vector^) |
外積二項演算子 | |
代入演算子 | |
static void | operator*= (fk_Vector^, double) |
実数積代入演算子 | |
static void | operator/= (fk_Vector^, double) |
実数商代入演算子 | |
static void | operator+= (fk_Vector^, fk_Vector^) |
単項和代入演算子 | |
static void | operator-= (fk_Vector^, fk_Vector^) |
単項差代入演算子 | |
プロパティ | |
double | x [get, set] |
x成分プロパティ | |
double | y [get, set] |
y成分プロパティ | |
double | z [get, set] |
z成分プロパティ | |
3次元ベクトルを管理するクラス
このクラスは、3次元ベクトルの様々な機能を提供します。 成分は double 型によって格納されています。 このクラスでは、内積値や外積ベクトル、ノルム算出などの ベクトルに関する基本的な演算が利用できます。 また、 fk_Matrix との組み合わせによる行列演算も可能です。
fk_Vector にはもう一つ、 多くの3次元ベクトル情報のやりとりに利用されるという重要な側面があります。 そのため、形状操作やモデル操作など多岐に渡って利用する機会があります。
4次元のベクトルを扱う場合は fk_HVector を参照して下さい。 成分を float 型として格納する場合は fk_FVector を参照して下さい。 任意次元のベクトルを扱う場合は fk_GenVector を参照して下さい。
FK_CLI::fk_Vector::fk_Vector | ( | ) |
コンストラクタ1
初期値として \( (0, 0, 0) \) が代入されます。
FK_CLI::fk_Vector::fk_Vector | ( | double | x, |
double | y, | ||
double | z | ||
) |
コンストラクタ2
[in] | x | x成分 |
[in] | y | y成分 |
[in] | z | z成分 |
FK_CLI::fk_Vector::fk_Vector | ( | double | x, |
double | y | ||
) |
コンストラクタ3
[in] | x | x成分 |
[in] | y | y成分 |
FK_CLI::fk_Vector::fk_Vector | ( | double | x | ) |
コンストラクタ
[in] | x | x成分 |
FK_CLI::fk_Vector::fk_Vector | ( | fk_Vector^ | V | ) |
コンストラクタ3
引数で与えられたベクトルの値をコピーし、新たにインスタンスを生成します。
[in] | V | 別のインスタンス。 |
FK_CLI::fk_Vector::~fk_Vector | ( | ) |
内積二項演算子
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;
なお、内積は交換法則が成り立ちます。
ベクトル和二項演算子
ベクトル V1 と V2 の和を得るには、以下のように記述します。 V1, V2, V3 はいずれも fk_Vector 型の変数です。
V3 = V1 + V2;
なお、和演算は交換法則が成り立ちます。
ベクトル差二項演算子
ベクトル V1 と V2 の差を得るには、以下のように記述します。 V1, V2, V3 はいずれも fk_Vector 型の変数です。
V3 = V1 - V2;
なお、差演算は交換法則が成り立ちません。
実数倍二項演算子1
ベクトル V1 のスカラー倍ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_Vector 型の変数で、d は double 型の変数です。
V2 = V1 * d;
なお、ベクトルと実数の順番は逆でも構いません。
実数倍二項演算子2
ベクトル V1 のスカラー倍ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_Vector 型の変数で、d は double 型の変数です。
V2 = d * V1;
なお、ベクトルと実数の順番は逆でも構いません。
実数商二項演算子
ベクトル V1 のスカラー商ベクトルを得るには、以下のように記述します。 V1, V2 は共に fk_Vector 型の変数で、d は double 型の変数です。
V2 = V1/d;
外積二項演算子
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;
なお、外積は以下のような法則があります。
|
static |
実数積代入演算子
以下のコードは、V を d 倍します。 V は fk_Vector 型の変数、d は double 型の変数です。
V *= d;
d は変数でなく数値でも構いません。
V *= 2.0;
|
static |
実数商代入演算子
以下のコードは、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;
bool FK_CLI::fk_Vector::Equals | ( | fk_Vector^ | V | ) |
同値比較メソッド1
2つのベクトルの値が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。
[in] | V | 同値かどうかを判定するベクトル |
|
overridevirtual |
同値比較メソッド2
2つのベクトルの値が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。
[in] | V | 同値かどうかを判定するベクトル |
|
override |
文字列出力メソッド
現在のベクトル成分値を文字列として出力します。
void FK_CLI::fk_Vector::Set | ( | double | x, |
double | y, | ||
double | z | ||
) |
成分設定メソッド1
各成分を設定します。
[in] | x | x成分の値 |
[in] | y | y成分の値 |
[in] | z | z成分の値 |
void FK_CLI::fk_Vector::Set | ( | double | x, |
double | y | ||
) |
成分設定メソッド2
各成分を設定します。z 成分は現状を維持します。
[in] | x | x成分の値 |
[in] | y | y成分の値 |
void FK_CLI::fk_Vector::Set | ( | double | x | ) |
成分設定メソッド3
各成分を設定します。y, z 成分は現状を維持します。
[in] | x | x成分の値 |
double FK_CLI::fk_Vector::Dist | ( | ) |
ベクトル長さ算出メソッド
ベクトルの長さ(ノルム)を返します。 ベクトル \( \mathbf{V} \) の長さは以下の式で算出されます。
\[ |\mathbf{V}| = \sqrt{{V_x}^2 + {V_y}^2 + {V_z}^2} \]
double FK_CLI::fk_Vector::Dist2 | ( | ) |
ベクトル長さ平方算出メソッド
ベクトルの長さ(ノルム)の2乗の値を返します。 \( \mathbf{V} \) の長さの2乗は以下の式で算出されます。
\[ |\mathbf{V}|^2 = {V_x}^2 + {V_y}^2 + {V_z}^2 \]
平方根演算がない分、 dist() と比べて若干高速です。
bool FK_CLI::fk_Vector::Normalize | ( | ) |
正規化メソッド
ベクトルの正規化を行います。 正規化とは、ベクトル \( \mathbf{V} \) に対し、 以下の演算で \( \mathbf{V}' \) を求めることです。
\[ \mathbf{V}' = \frac{\mathbf{V}}{|\mathbf{V}|} \]
bool FK_CLI::fk_Vector::IsZero | ( | ) |
零ベクトル判定メソッド
射影ベクトル算出メソッド
このメソッドは、元ベクトルから引数ベクトルに対する射影ベクトルを算出します。 元ベクトルを \( \mathbf{P} \), 引数ベクトルを \( \mathbf{Q} \), 射影ベクトルを \( \mathbf{P}' \) とすると、 以下の式で算出されます。
\[ \mathbf{P}' = \frac{\mathbf{P}\cdot\mathbf{Q}} {|\mathbf{Q}|^2} \mathbf{Q} \]
図による解説は、ユーザーズマニュアルの「ベクトルの射影」項目を参照して下さい。
[in] | Q | 射影基準ベクトル |
射影垂直成分ベクトル算出メソッド
このメソッドは、元ベクトルから引数ベクトルに対する射影の垂直成分ベクトルを算出します。 これは、元ベクトルと proj() で求められる射影ベクトルの差分ベクトルと同義です。 図による解説は、ユーザーズマニュアルの「ベクトルの射影」項目を参照して下さい。
[in] | Q | 射影基準ベクトル |
void FK_CLI::fk_Vector::Init | ( | void | ) |
初期化メソッド
3次元ベクトルを (0, 0, 0) に設定します。
|
getset |
x成分プロパティ
x成分を表すプロパティです。以下のようなコードで利用できます。
V.x = 0.0;
|
getset |
y成分プロパティ
z成分を表すプロパティです。以下のようなコードで利用できます。
V.y = 0.0;
|
getset |
z成分プロパティ
z成分を表すプロパティです。以下のようなコードで利用できます。
V.z = 0.0;