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

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

+ FK_CLI::fk_GenVector 連携図

公開メンバ関数

 fk_GenVector ()
 コンストラクタ1 [詳解]
 
 fk_GenVector (int deg)
 コンストラクタ2 [詳解]
 
 fk_GenVector (IEnumerable< double >^array)
 コンストラクタ3 [詳解]
 
 fk_GenVector (fk_Vector^ V)
 fk_Vector からのコピーコンストラクタ [詳解]
 
 fk_GenVector (fk_HVector^ H)
 fk_HVector からのコピーコンストラクタ [詳解]
 
 fk_GenVector (fk_GenVector^ GV)
 コピーコンストラクタ [詳解]
 
 ~fk_GenVector ()
 デストラクタ [詳解]
 
 !fk_GenVector ()
 ファイナライザ [詳解]
 
bool Equals (fk_GenVector^ V)
 同値比較メソッド1 [詳解]
 
virtual bool Equals (Object^ O) override
 同値比較メソッド2 [詳解]
 
String^ ToString () override
 文字列出力メソッド [詳解]
 
bool Normalize (void)
 正規化メソッド [詳解]
 
void Init (bool degFlg)
 初期化メソッド1 [詳解]
 
void Init (void)
 初期化メソッド2 [詳解]
 
bool IsZero (void)
 零ベクトル判定メソッド [詳解]
 
bool Replace (int s, fk_GenVector^ Q)
 部分置換メソッド1 [詳解]
 
bool Replace (int s, fk_Vector^ Q)
 部分置換メソッド2 [詳解]
 
bool Replace (int s, fk_HVector^ Q)
 部分置換メソッド3 [詳解]
 
bool Add (int s, fk_GenVector^ Q)
 部分加算メソッド1 [詳解]
 
bool Add (int s, fk_Vector^ Q)
 部分加算メソッド2 [詳解]
 
bool Add (int s, fk_HVector^ Q)
 部分加算メソッド3 [詳解]
 
bool Sub (int s, fk_GenVector^ Q)
 部分減算メソッド1 [詳解]
 
bool Sub (int s, fk_Vector^ Q)
 部分減算メソッド2 [詳解]
 
bool Sub (int s, fk_HVector^ Q)
 部分減算メソッド3 [詳解]
 
fk_GenVectorDiv (int s, int e)
 部分抽出メソッド [詳解]
 

静的公開メンバ関数

static fk_GenVectoroperator- (fk_GenVector^ argV)
 単項マイナス演算子 [詳解]
 
static double operator* (fk_GenVector^ P, fk_GenVector^ Q)
 内積二項演算子 [詳解]
 
static fk_GenVectoroperator+ (fk_GenVector^ P, fk_GenVector^ Q)
 ベクトル和二項演算子 [詳解]
 
static fk_GenVectoroperator- (fk_GenVector^ P, fk_GenVector^ Q)
 ベクトル差二項演算子 [詳解]
 
static fk_GenVectoroperator* (fk_GenVector^ V1, double d)
 実数倍二項演算子1 [詳解]
 
static fk_GenVectoroperator* (double d, fk_GenVector^ V1)
 実数倍二項演算子2 [詳解]
 
static fk_GenVectoroperator/ (fk_GenVector^ V1, double d)
 実数商二項演算子 [詳解]
 
static fk_GenVectoroperator^ (fk_GenVector^ P, fk_GenVector^ Q)
 外積二項演算子 [詳解]
 
static void operator*= (fk_GenVector^ V, double d)
 実数積演算子 [詳解]
 
static void operator/= (fk_GenVector^ V, double d)
 実数商代入演算子 [詳解]
 
static void operator+= (fk_GenVector^ V1, fk_GenVector^ V2)
 単項和代入演算子 [詳解]
 
static void operator-= (fk_GenVector^ V1, fk_GenVector^ V2)
 単項差代入演算子 [詳解]
 

プロパティ

double default[int] [get, set]
 成分プロパティ [詳解]
 
int Size [get, set]
 次元数プロパティ [詳解]
 
double Norm [get]
 ノルムプロパティ [詳解]
 
double Norm2 [get]
 ノルム2乗プロパティ [詳解]
 

詳解

任意次元ベクトルを管理するクラス

このクラスは、任意次元ベクトルの様々な機能を提供します。 このクラス単体でも、線形空間におけるベクトルの様々な演算を利用することができます。 最も重要な機能は、 fk_GenMatrix クラスと合わせた行列演算による連立方程式の計算です。 4元以下の行列演算については、 fk_Matrix を利用した方が高速です。

参照
fk_GenMatrix, fk_Vector, fk_HVector, fk_Matrix

構築子と解体子

FK_CLI::fk_GenVector::fk_GenVector ( )

コンストラクタ1

次元数が 0 である (つまり成分のない)ベクトルを生成します。

FK_CLI::fk_GenVector::fk_GenVector ( int  deg)

コンストラクタ2

次元数のみを指定するコンストラクタです。 全ての成分に 0 が設定されます。

引数
[in]deg次元数
FK_CLI::fk_GenVector::fk_GenVector ( IEnumerable< double >^  array)

コンストラクタ3

このコンストラクタでは、 引数として double 型配列 (array) を入力とします。

引数
[in]array成分値配列
FK_CLI::fk_GenVector::fk_GenVector ( fk_Vector V)

fk_Vector からのコピーコンストラクタ

FK_CLI::fk_GenVector::fk_GenVector ( fk_HVector H)

fk_HVector からのコピーコンストラクタ

FK_CLI::fk_GenVector::fk_GenVector ( fk_GenVector GV)

コピーコンストラクタ

FK_CLI::fk_GenVector::~fk_GenVector ( )

デストラクタ

FK_CLI::fk_GenVector::!fk_GenVector ( )

ファイナライザ

関数詳解

bool FK_CLI::fk_GenVector::Equals ( fk_GenVector V)

同値比較メソッド1

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

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

同値比較メソッド2

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

引数
[in]O同値かどうかを判定するベクトル
戻り値
同値であれば true を、そうでなければ false を返します。
static fk_GenVector ^ FK_CLI::fk_GenVector::operator- ( fk_GenVector argV)
static

単項マイナス演算子

fk_GenVector では、以下のように記述することで、v2 に -v1 を代入できます。 全ての成分の符号が反転します。 v2 の次元数は v1 と同じに設定されます。

v2 = -v1;
static double FK_CLI::fk_GenVector::operator* ( fk_GenVector P,
fk_GenVector Q 
)
static

内積二項演算子

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

\[ \mathbf{P}\cdot\mathbf{Q} = \sum_{i=0}^{n-1} P_iQ_i \]

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

d = P * Q;

P と Q の次元数が異なる場合は、無条件に 0.0 を返します。 なお、内積演算は交換法則が成り立ちます。

static fk_GenVector ^ FK_CLI::fk_GenVector::operator+ ( fk_GenVector P,
fk_GenVector Q 
)
static

ベクトル和二項演算子

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

R = P + Q;

P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。 なお、和演算は交換法則が成り立ちます。

static fk_GenVector ^ FK_CLI::fk_GenVector::operator- ( fk_GenVector P,
fk_GenVector Q 
)
static

ベクトル差二項演算子

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

R = P - Q;

P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。 なお、差演算は交換法則は成り立ちません。

static fk_GenVector ^ FK_CLI::fk_GenVector::operator* ( fk_GenVector V1,
double  d 
)
static

実数倍二項演算子1

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

V2 = V1 * d;

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

static fk_GenVector ^ FK_CLI::fk_GenVector::operator* ( double  d,
fk_GenVector V1 
)
static

実数倍二項演算子2

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

V2 = d * V1;

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

static fk_GenVector ^ FK_CLI::fk_GenVector::operator/ ( fk_GenVector V1,
double  d 
)
static

実数商二項演算子

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

V2 = V1/d;
static fk_GenVector ^ FK_CLI::fk_GenVector::operator^ ( fk_GenVector P,
fk_GenVector Q 
)
static

外積二項演算子

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

\[ \mathbf{P} \times \mathbf{Q} = \left(P_1Q_2 - P_2Q_1, \; P_2Q_3 - P_3Q_2, \ldots, \; P_{n-2}Q_{n-1} - P_{n-1}Q_{n-2}, \; P_{n-1}Q_0 - P_0Q_{n-1}, \; P_0Q_1 - P_1Q_0\right) \]

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

R = P ^ Q;

P と Q の次元数が異なる場合は、次元数 0 のベクトルを返します。

static void FK_CLI::fk_GenVector::operator*= ( fk_GenVector V,
double  d 
)
static

実数積演算子

以下のコードは、ベクトル V の成分全てを d 倍します。 V は fk_GenVector 型の変数、d は double 型の変数です。

V *= d;

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

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

実数商代入演算子

以下のコードは、ベクトル V の成分全てを 1/d 倍します。 V は fk_GenVector 型の変数、d は double 型の変数です。

V /= d;

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

V /= 2.0;

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

static void FK_CLI::fk_GenVector::operator+= ( fk_GenVector V1,
fk_GenVector V2 
)
static

単項和代入演算子

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

V1 += V2;

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

V1 = V1 + V2;

V1 と V2 の次元数が異なる場合は、V1 の値は変化しません。

static void FK_CLI::fk_GenVector::operator-= ( fk_GenVector V1,
fk_GenVector V2 
)
static

単項差代入演算子

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

V1 -= V2;

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

V1 = V1 - V2;

V1 と V2 の次元数が異なる場合は、V1 の値は変化しません。

String ^ FK_CLI::fk_GenVector::ToString ( )
override

文字列出力メソッド

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

戻り値
成分値の文字列
bool FK_CLI::fk_GenVector::Normalize ( void  )

正規化メソッド

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

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

戻り値
成功した場合 true を、失敗した場合 false を返します。 「失敗」は、元のベクトルが零ベクトルであるか、 次元数が 0 の場合に起こります。
参照
Norm, Norm2
void FK_CLI::fk_GenVector::Init ( bool  degFlg)

初期化メソッド1

ベクトルの成分を全て 0 にします。

引数
[in]degFlgtrue の場合は、次元数を 0 に設定します。 false の場合は、次元数は変化せず、全ての成分を 0 にします。
void FK_CLI::fk_GenVector::Init ( void  )

初期化メソッド2

ベクトルの成分を全て 0 にします。 次元数は変化しません。

bool FK_CLI::fk_GenVector::IsZero ( void  )

零ベクトル判定メソッド

ベクトルが零ベクトルであるかどうかを判定します。

戻り値
零ベクトルである場合 true を、そうでない場合 false を返します。 次元数が 0 である場合は true を返します。
bool FK_CLI::fk_GenVector::Replace ( int  s,
fk_GenVector Q 
)

部分置換メソッド1

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる m 次元ベクトル

\[ \mathbf{Q} = (Q_0, \; Q_1, \; \ldots, \; Q_{m-1}) \]

について、 $ \mathbf{P} $ の m 個の成分

\[ P_{s}, \; P_{s+1}, \; \ldots, \; P_{s+m-1} \]

$ \mathbf{Q} $ の各成分に置き換えます。 条件として、 $ s \geq 0 $ かつ $ n \geq s + m - 1 $ を満たしている必要があります。

引数
[in]s置換する最初の成分 ID
[in]Q置換ベクトル
戻り値
置換に成功した場合 true を、失敗した場合 false を返します。
bool FK_CLI::fk_GenVector::Replace ( int  s,
fk_Vector Q 
)

部分置換メソッド2

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 3 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z) \]

について、 $ \mathbf{P} $ の 3 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2} \]

$ Q_x, Q_y, Q_z $ の各成分に置き換えます。 条件として、 $ s \geq 0 $ かつ $ n \geq s + 2 $ を満たしている必要があります。

引数
[in]s置換する最初の成分 ID
[in]Q置換ベクトル
戻り値
置換に成功した場合 true を、失敗した場合 false を返します。
bool FK_CLI::fk_GenVector::Replace ( int  s,
fk_HVector Q 
)

部分置換メソッド3

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 4 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z, \; Q_w) \]

について、 $ \mathbf{P} $ の 4 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2}, \; P_{s+3} \]

$ Q_x, Q_y, Q_z, Q_w $ の各成分に置き換えます。 条件として、 $ s \geq 0 $ かつ $ n \geq s + 3 $ を満たしている必要があります。

引数
[in]s置換する最初の成分 ID
[in]Q置換ベクトル
戻り値
置換に成功した場合 true を、失敗した場合 false を返します。
bool FK_CLI::fk_GenVector::Add ( int  s,
fk_GenVector Q 
)

部分加算メソッド1

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる m 次元ベクトル

\[ \mathbf{Q} = (Q_0, \; Q_1, \; \ldots, \; Q_{m-1}) \]

について、 $ \mathbf{P} $ の m 個の成分

\[ P_{s}, \; P_{s+1}, \; \ldots, \; P_{s+m-1} \]

に対して $ \mathbf{Q} $ の各成分の値を加算します。 条件として、 $ s \geq 0 $ かつ $ n \geq s + m - 1 $ を満たしている必要があります。

引数
[in]s加算する最初の成分 ID
[in]Q加算ベクトル
戻り値
加算に成功した場合 true を、失敗した場合 false を返します。
bool FK_CLI::fk_GenVector::Add ( int  s,
fk_Vector Q 
)

部分加算メソッド2

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 3 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z) \]

について、 $ \mathbf{P} $ の 3 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2} \]

に対して $ Q_x, Q_y, Q_z $ の各成分の値を加算します。 条件として、 $ s \geq 0 $ かつ $ n \geq s + 2 $ を満たしている必要があります。

引数
[in]s加算する最初の成分 ID
[in]Q加算ベクトル
戻り値
加算に成功した場合 true を、失敗した場合 false を返します。
bool FK_CLI::fk_GenVector::Add ( int  s,
fk_HVector Q 
)

部分加算メソッド3

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 4 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z, \; Q_w) \]

について、 $ \mathbf{P} $ の 4 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2}, \; P_{s+3} \]

に対して $ Q_x, Q_y, Q_z, Q_w $ の各成分の値を加算します。 条件として、 $ s \geq 0 $ かつ $ n \geq s + 3 $ を満たしている必要があります。

引数
[in]s加算する最初の成分 ID
[in]Q加算ベクトル
戻り値
加算に成功した場合 true を、失敗した場合 false を返します。
bool FK_CLI::fk_GenVector::Sub ( int  s,
fk_GenVector Q 
)

部分減算メソッド1

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる m 次元ベクトル

\[ \mathbf{Q} = (Q_0, \; Q_1, \; \ldots, \; Q_{m-1}) \]

について、 $ \mathbf{P} $ の m 個の成分

\[ P_{s}, \; P_{s+1}, \; \ldots, \; P_{s+m-1} \]

に対して $ \mathbf{Q} $ の各成分の値を減算します。 条件として、 $ s \geq 0 $ かつ $ n \geq s + m - 1 $ を満たしている必要があります。

引数
[in]s減算する最初の成分 ID
[in]Q減算ベクトル
戻り値
減算に成功した場合 true を、失敗した場合 false を返します。
bool FK_CLI::fk_GenVector::Sub ( int  s,
fk_Vector Q 
)

部分減算メソッド2

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 3 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z) \]

について、 $ \mathbf{P} $ の 3 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2} \]

に対して $ Q_x, Q_y, Q_z $ の各成分の値を加算します。 条件として、 $ s \geq 0 $ かつ $ n \geq s + 2 $ を満たしている必要があります。

引数
[in]s減算する最初の成分 ID
[in]Q減算ベクトル
戻り値
減算に成功した場合 true を、失敗した場合 false を返します。
bool FK_CLI::fk_GenVector::Sub ( int  s,
fk_HVector Q 
)

部分減算メソッド3

現在の変数が表す n 次元のベクトル

\[ \mathbf{P} = (P_0, \; P_1, \; \ldots, \; P_{n-1}) \]

と、引数として与えられる 4 次元ベクトル

\[ \mathbf{Q} = (Q_x, \; Q_y, \; Q_z, \; Q_w) \]

について、 $ \mathbf{P} $ の 4 個の成分

\[ P_s, \; P_{s+1}, \; P_{s+2}, \; P_{s+3} \]

に対して $ Q_x, Q_y, Q_z, Q_w $ の各成分の値を加算します。 条件として、 $ s \geq 0 $ かつ $ n \geq s + 3 $ を満たしている必要があります。

引数
[in]s減算する最初の成分 ID
[in]Q減算ベクトル
戻り値
減算に成功した場合 true を、失敗した場合 false を返します。
fk_GenVector ^ FK_CLI::fk_GenVector::Div ( int  s,
int  e 
)

部分抽出メソッド

ID が s から e までの成分値を持つ部分ベクトルを抽出します。 条件として、 $ 0 \leq s < e < n $ である必要があります。n は元ベクトルの次元数です。

引数
[in]s抽出開始成分 ID
[in]e抽出終了成分 ID
戻り値
部分ベクトル。引数が条件を満たさなかった場合は、 次元数が 0 のベクトルを返します。

プロパティ詳解

double FK_CLI::fk_GenVector::default[int]
getset

成分プロパティ

各成分の設定や参照を行います。

V[0] = 5.0;
int FK_CLI::fk_GenVector::Size
getset

次元数プロパティ

次元数 (成分の個数) の設定や参照を行います。

int deg = V.size;
V.size = 10;
double FK_CLI::fk_GenVector::Norm
get

ノルムプロパティ

現在のベクトルのノルム(長さ)を取得します。 これは、ベクトル $ \mathbf{V} = \{V_0, V_1, \ldots, V_{n-1}\} $ に対し、

\[ \sqrt{\sum_{i = 0}^{n-1} {V_i}^2} \]

の値となります。

参照
Normalize()
double FK_CLI::fk_GenVector::Norm2
get

ノルム2乗プロパティ

現在のベクトルのノルム(長さ)の2乗を取得します。 これは、ベクトル $ \mathbf{V} = \{V_0, V_1, \ldots, V_{n-1}\} $ に対し、

\[ \sum_{i = 0}^{n-1} {V_i}^2 \]

の値となります。

参照
Normalize()