FineKernelToolKit 4.2.13
読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
FK::fk_GenVector クラス

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

#include <FK/GenVector.h>

公開メンバ関数

 fk_GenVector (int deg=0)
 コンストラクタ1
 
 fk_GenVector (std::vector< double > &array)
 コンストラクタ2
 
 fk_GenVector (int deg, double *array)
 コンストラクタ3
 
 fk_GenVector (const fk_GenVector &)
 コピーコンストラクタ
 
 fk_GenVector (const fk_Vector &)
 fk_Vector からのコピーコンストラクタ
 
 fk_GenVector (const fk_HVector &)
 fk_HVector からのコピーコンストラクタ
 
単項演算子
fk_GenVectoroperator- (void) const
 単項マイナス演算子
 
比較演算子
bool operator== (const fk_GenVector &) const
 同値比較演算子
 
bool operator!= (const fk_GenVector &) const
 異値比較演算子
 
代入演算子
fk_GenVectoroperator= (const fk_GenVector &)
 単純代入演算子
 
fk_GenVectoroperator= (const fk_Vector &)
 fk_Vector 型からの単純代入演算子
 
fk_GenVectoroperator= (const fk_HVector &)
 fk_HVector 型からの単純代入演算子
 
fk_GenVectoroperator*= (double d)
 実数積演算子
 
fk_GenVectoroperator/= (double)
 実数商代入演算子
 
fk_GenVectoroperator+= (const fk_GenVector &)
 単項和代入演算子
 
fk_GenVectoroperator-= (const fk_GenVector &)
 単項差代入演算子
 
fk_GenVectoroperator*= (const fk_GenMatrix &)
 行列変換代入演算子
 
メンバ関数
void resize (int deg)
 次元数設定関数
 
bool set (int ID, double value)
 
int size (void) const
 次元数取得関数
 
double get (int ID) const
 成分値取得関数
 
double norm (void) const
 ノルム取得関数
 
double norm2 (void) const
 ノルム平方値取得関数
 
bool normalize (void)
 正規化関数
 
void init (bool degFlg=false)
 初期化関数
 
bool isZero (void) const
 零ベクトル判定関数
 
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_GenVector div (int s, int e)
 部分抽出関数
 

詳解

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

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

参照
fk_GenMatrix, fk_Vector, fk_HVector, fk_Matrix

構築子と解体子

◆ fk_GenVector() [1/6]

FK::fk_GenVector::fk_GenVector ( int  deg = 0)

コンストラクタ1

次元数のみを指定するコンストラクタです。 全ての成分に 0 が設定されます。 引数を省略した場合、 次元数が 0 である (つまり成分のない)ベクトルを生成します。

引数
[in]deg次元数

◆ fk_GenVector() [2/6]

FK::fk_GenVector::fk_GenVector ( std::vector< double > &  array)

コンストラクタ2

このコンストラクタでは、 引数として STL の vector<double> 型配列を入力とします。

引数
[in]array成分値配列

◆ fk_GenVector() [3/6]

FK::fk_GenVector::fk_GenVector ( int  deg,
double *  array 
)

コンストラクタ3

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

引数
[in]deg次元数
[in]array成分値配列

◆ fk_GenVector() [4/6]

FK::fk_GenVector::fk_GenVector ( const fk_GenVector )

コピーコンストラクタ

◆ fk_GenVector() [5/6]

FK::fk_GenVector::fk_GenVector ( const fk_Vector )

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

◆ fk_GenVector() [6/6]

FK::fk_GenVector::fk_GenVector ( const fk_HVector )

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

関数詳解

◆ operator-()

fk_GenVector & FK::fk_GenVector::operator- ( void  ) const

単項マイナス演算子

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

v2 = -v1;

◆ operator==()

bool FK::fk_GenVector::operator== ( const fk_GenVector ) const

同値比較演算子

fk_GenVector では、以下のように記述することで、 v1 と v2 が等しいかどうかを判断できます。

if(v1 == v2) {
    :
    :
}

ここでの比較は、ある程度の計算誤差を許容します。 次元数が異なる場合は、成分値にかかわらず偽となります。

◆ operator!=()

bool FK::fk_GenVector::operator!= ( const fk_GenVector ) const

異値比較演算子

fk_GenVector では、以下のように記述することで、 v1 と v2 が等しくないかどうかを判断できます。

if(v1 != v2) {
    :
    :
}

ここでの比較は、ある程度の計算誤差を許容します。 次元数が異なる場合は、成分値にかかわらず真となります。

◆ operator=() [1/3]

fk_GenVector & FK::fk_GenVector::operator= ( const fk_GenVector )

単純代入演算子

◆ operator=() [2/3]

fk_GenVector & FK::fk_GenVector::operator= ( const fk_Vector )

fk_Vector 型からの単純代入演算子

◆ operator=() [3/3]

fk_GenVector & FK::fk_GenVector::operator= ( const fk_HVector )

fk_HVector 型からの単純代入演算子

◆ operator*=() [1/2]

fk_GenVector & FK::fk_GenVector::operator*= ( double  d)

実数積演算子

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

V *= d;

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

V *= 2.0;

◆ operator/=()

fk_GenVector & FK::fk_GenVector::operator/= ( double  )

実数商代入演算子

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

V /= d;

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

V /= 2.0;

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

◆ operator+=()

fk_GenVector & FK::fk_GenVector::operator+= ( const fk_GenVector )

単項和代入演算子

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

V1 += V2;

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

V1 = V1 + V2;

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

◆ operator-=()

fk_GenVector & FK::fk_GenVector::operator-= ( const fk_GenVector )

単項差代入演算子

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

V1 -= V2;

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

V1 = V1 - V2;

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

◆ operator*=() [2/2]

fk_GenVector & FK::fk_GenVector::operator*= ( const fk_GenMatrix )

行列変換代入演算子

以下のコードは、ベクトル V を 行列 M によって変換した値を代入します。 V は fk_GenVector 型の変数、M は fk_GenMatrix 型の変数です。

V *= M;

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

V = M * V;

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

◆ resize()

void FK::fk_GenVector::resize ( int  deg)

次元数設定関数

次元数を設定します。 各成分の値は可能な限り引き継がれます。

引数
[in]deg次元数

◆ set()

bool FK::fk_GenVector::set ( int  ID,
double  value 
)

成分値を設定します。 id は最初の成分が 0 になります。 id が次元数に対して不正であった場合は失敗となります。

引数
[in]ID成分のID
[in]value設定値
戻り値
成功すれば true を、失敗すれば false を返します。

◆ size()

int FK::fk_GenVector::size ( void  ) const

次元数取得関数

次元数を取得します。

戻り値
次元数

◆ get()

double FK::fk_GenVector::get ( int  ID) const

成分値取得関数

引数に対応する成分を取得します。 最初の成分 ID は 0 です。

引数
[in]ID成分のID
戻り値
対応する成分値。ID が不正であった場合は無条件に 0.0 を返します。

◆ norm()

double FK::fk_GenVector::norm ( void  ) const

ノルム取得関数

ベクトルのノルムを取得します。 ノルムは、次元数 n のベクトル \( \mathbf{V} = (V_0, \; V_1, \; \ldots, \; V_{n-1}) \) に対し、以下の式で算出します。

\[ |\mathbf{V}| = \sqrt{\sum_{i=0}^{n-1} (V_i)^2} \]

戻り値
ノルム
参照
norm2(), normalize()

◆ norm2()

double FK::fk_GenVector::norm2 ( void  ) const

ノルム平方値取得関数

ベクトルのノルムの平方値を取得します。 ノルムは、次元数 n のベクトル \( \mathbf{V} = (V_0, \; V_1, \; \ldots, \; V_{n-1}) \) に対し、以下の式で算出します。

\[ |\mathbf{V}|^2 = \sum_{i=0}^{n-1} (V_i)^2 \]

戻り値
ノルム平方値
参照
norm(), normalize()

◆ normalize()

bool FK::fk_GenVector::normalize ( void  )

正規化関数

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

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

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

◆ init()

void FK::fk_GenVector::init ( bool  degFlg = false)

初期化関数

ベクトルの初期化を行います。

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

◆ isZero()

bool FK::fk_GenVector::isZero ( void  ) const

零ベクトル判定関数

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

戻り値
零ベクトルである場合 true を、そうでない場合 false を返します。 次元数が 0 である場合は true を返します。

◆ replace() [1/3]

bool FK::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 を返します。

◆ replace() [2/3]

bool FK::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 を返します。

◆ replace() [3/3]

bool FK::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 を返します。

◆ add() [1/3]

bool FK::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 を返します。

◆ add() [2/3]

bool FK::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 を返します。

◆ add() [3/3]

bool FK::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 を返します。

◆ sub() [1/3]

bool FK::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 を返します。

◆ sub() [2/3]

bool FK::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 を返します。

◆ sub() [3/3]

bool FK::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 を返します。

◆ div()

fk_GenVector FK::fk_GenVector::div ( int  s,
int  e 
)

部分抽出関数

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

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