FineKernelToolKit  3.1.0
公開メンバ関数 | プロパティ | 全メンバ一覧
FK_CLI::fk_Vector クラス

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

公開メンバ関数

 fk_Vector ()
 コンストラクタ1 [詳解]
 
 fk_Vector (double x, double y, double z)
 コンストラクタ2 [詳解]
 
 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 [詳解]
 
double Dist ()
 ベクトル長さ算出メソッド [詳解]
 
double Dist2 ()
 ベクトル長さ平方算出メソッド [詳解]
 
bool Normalize ()
 正規化メソッド [詳解]
 
bool IsZero ()
 零ベクトル判定メソッド [詳解]
 
fk_VectorProj (fk_Vector^ Q)
 射影ベクトル算出メソッド [詳解]
 
fk_VectorPerp (fk_Vector^ Q)
 射影垂直成分ベクトル算出メソッド [詳解]
 
void Init (void)
 初期化メソッド [詳解]
 

静的公開メンバ関数

単項演算子
static fk_Vectoroperator- (fk_Vector^ )
 単項マイナス演算子 [詳解]
 
二項演算子
static double operator* (fk_Vector^ , fk_Vector^ )
 内積二項演算子 [詳解]
 
static fk_Vectoroperator+ (fk_Vector^ , fk_Vector^ )
 ベクトル和二項演算子 [詳解]
 
static fk_Vectoroperator- (fk_Vector^ , fk_Vector^ )
 ベクトル差二項演算子 [詳解]
 
static fk_Vectoroperator* (fk_Vector^ , double)
 実数倍二項演算子1 [詳解]
 
static fk_Vectoroperator* (double, fk_Vector^ )
 実数倍二項演算子2 [詳解]
 
static fk_Vectoroperator/ (fk_Vector^ , double)
 実数商二項演算子 [詳解]
 
static fk_Vectoroperator^ (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_Matrix, fk_HVector, 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]xx成分
[in]yy成分
[in]zz成分
FK_CLI::fk_Vector::fk_Vector ( fk_Vector V)

コンストラクタ3

引数で与えられたベクトルの値をコピーし、新たにインスタンスを生成します。

引数
[in]V別のインスタンス。
FK_CLI::fk_Vector::~fk_Vector ( )

関数詳解

static fk_Vector ^ FK_CLI::fk_Vector::operator- ( fk_Vector )
static

単項マイナス演算子

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

v2 = -v1;
static double FK_CLI::fk_Vector::operator* ( fk_Vector ,
fk_Vector  
)
static

内積二項演算子

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;

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

static fk_Vector ^ FK_CLI::fk_Vector::operator+ ( fk_Vector ,
fk_Vector  
)
static

ベクトル和二項演算子

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

V3 = V1 + V2;

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

static fk_Vector ^ FK_CLI::fk_Vector::operator- ( fk_Vector ,
fk_Vector  
)
static

ベクトル差二項演算子

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

V3 = V1 - V2;

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

static fk_Vector ^ FK_CLI::fk_Vector::operator* ( fk_Vector ,
double   
)
static

実数倍二項演算子1

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

V2 = V1 * d;

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

static fk_Vector ^ FK_CLI::fk_Vector::operator* ( double  ,
fk_Vector  
)
static

実数倍二項演算子2

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

V2 = d * V1;

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

static fk_Vector ^ FK_CLI::fk_Vector::operator/ ( fk_Vector ,
double   
)
static

実数商二項演算子

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

V2 = V1/d;
static fk_Vector ^ FK_CLI::fk_Vector::operator^ ( fk_Vector ,
fk_Vector  
)
static

外積二項演算子

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}) $ である。
覚え書き
ここで演算子として採用されている「^」は、 あまり演算子としての優先度が高くありません。 そのため、括弧を適切に使用しないと本来の意図と異なる結果を生じるおそれがあります。
static void FK_CLI::fk_Vector::operator*= ( fk_Vector ,
double   
)
static

実数積代入演算子

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

V *= d;

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

V *= 2.0;
static void FK_CLI::fk_Vector::operator/= ( fk_Vector ,
double   
)
static

実数商代入演算子

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

V /= d;

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

V /= 2.0;

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

static void FK_CLI::fk_Vector::operator+= ( fk_Vector ,
fk_Vector  
)
static

単項和代入演算子

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

V1 += V2;

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

V1 = V1 + V2;
static void FK_CLI::fk_Vector::operator-= ( fk_Vector ,
fk_Vector  
)
static

単項差代入演算子

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

V1 -= V2;

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

V1 = V1 - V2;
bool FK_CLI::fk_Vector::Equals ( fk_Vector V)

同値比較メソッド1

2つのベクトルの値が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。

引数
[in]V同値かどうかを判定するベクトル
戻り値
同値であれば true を、そうでなければ false を返します。
virtual bool FK_CLI::fk_Vector::Equals ( Object^  V)
overridevirtual

同値比較メソッド2

2つのベクトルの値が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。

引数
[in]V同値かどうかを判定するベクトル
戻り値
同値であれば true を、そうでなければ false を返します。
String ^ FK_CLI::fk_Vector::ToString ( )
override

文字列出力メソッド

現在のベクトル成分値を文字列として出力します。

戻り値
成分値の文字列
void FK_CLI::fk_Vector::Set ( double  x,
double  y,
double  z 
)

成分設定メソッド1

各成分を設定します。

引数
[in]xx成分の値
[in]yy成分の値
[in]zz成分の値
void FK_CLI::fk_Vector::Set ( double  x,
double  y 
)

成分設定メソッド2

各成分を設定します。z 成分には自動的に 0 が代入されます。

引数
[in]xx成分の値
[in]yy成分の値
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}|} \]

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

零ベクトル判定メソッド

戻り値
零ベクトルである場合 true を、そうでない場合 false を返します。
fk_Vector ^ FK_CLI::fk_Vector::Proj ( fk_Vector Q)

射影ベクトル算出メソッド

このメソッドは、元ベクトルから引数ベクトルに対する射影ベクトルを算出します。 元ベクトルを $ \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_CLI::fk_Vector::Perp ( fk_Vector Q)

射影垂直成分ベクトル算出メソッド

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

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

初期化メソッド

3次元ベクトルを (0, 0, 0) に設定します。

プロパティ詳解

double FK_CLI::fk_Vector::x
getset

x成分プロパティ

x成分を表すプロパティです。以下のようなコードで利用できます。

V.x = 0.0;
double FK_CLI::fk_Vector::y
getset

y成分プロパティ

z成分を表すプロパティです。以下のようなコードで利用できます。

V.y = 0.0;
double FK_CLI::fk_Vector::z
getset

z成分プロパティ

z成分を表すプロパティです。以下のようなコードで利用できます。

V.z = 0.0;