FineKernelToolKit 4.2.13
|
パーティクル集合を制御するクラス [詳解]
#include <FK/ParticleSet.h>
公開メンバ関数 | |
fk_ParticleSet (unsigned int max=0) | |
コンストラクタ | |
virtual | ~fk_ParticleSet () |
デストラクタ | |
void | handle (void) |
実行関数 | |
fk_Shape * | getShape (void) const |
モデル設定用関数 | |
fk_Particle * | newParticle (void) |
パーティクル生成関数1 | |
fk_Particle * | newParticle (const fk_Vector &pos) |
パーティクル生成関数2 | |
fk_Particle * | newParticle (double x, double y, double z) |
パーティクル生成関数3 | |
bool | removeParticle (fk_Particle *p) |
パーティクル削除関数1 | |
bool | removeParticle (int ID) |
パーティクル削除関数2 | |
unsigned int | getCount (void) const |
年齢参照関数 | |
fk_Particle * | getParticle (int ID) const |
パーティクルインスタンス参照関数 | |
fk_Particle * | getNextParticle (fk_Particle *p) const |
パーティクルインスタンス順次取得取得 | |
unsigned int | getParticleNum (void) const |
パーティクル個数参照関数 | |
void | setMaxSize (unsigned int max) |
パーティクル最大個数設定関数 | |
unsigned int | getMaxSize (void) const |
パーティクル最大個数参照関数 | |
void | setAllMode (bool mode) |
全体動作モード設定関数 | |
bool | getAllMode (void) const |
全体動作モード参照関数 | |
void | setIndivMode (bool mode) |
個別動作モード設定関数 | |
bool | getIndivMode (void) const |
個別動作モード参照関数 | |
![]() | |
fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT) | |
コンストラクタ | |
fk_Type | getObjectType (void) const |
タイプ取得関数 | |
公開変数類 | |
std::function< void(fk_Particle *)> | genMethod |
個別初期化用仮想関数 | |
std::function< void(void)> | allMethod |
全体動作用仮想関数 | |
std::function< void(fk_Particle *)> | indivMethod |
個別動作用仮想関数 | |
パーティクル集合を制御するクラス
このクラスは、パーティクル集合を制御する機能を提供します。
「パーティクル」とは粒子のことで、流体表現などに利用します。 本クラスは、そのままインスタンスを生成して利用するのではなく、 このクラスの継承クラスに対して仮想関数を上書きして利用することを想定しています。 具体的には、以下のような手順となります。
このクラスと同様に点群を扱うクラスとして、 fk_Point があります。 fk_Particle や fk_ParticleSet が法則を記述することが主であることに対し、 fk_Point では点の制御をより直接的に行います。
FK::fk_ParticleSet::fk_ParticleSet | ( | unsigned int | max = 0 | ) |
コンストラクタ
初期値として、パーティクル最大個数をとります。
[in] | max | パーティクル最大個数 |
|
virtual |
デストラクタ
void FK::fk_ParticleSet::handle | ( | void | ) |
実行関数
パーティクル集合および各パーティクルに対し、時間経過処理を実行します。 具体的には、以下の処理が行われます。
fk_Shape * FK::fk_ParticleSet::getShape | ( | void | ) | const |
fk_Particle * FK::fk_ParticleSet::newParticle | ( | void | ) |
パーティクル生成関数1
パーティクルを原点上に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。
fk_Particle * FK::fk_ParticleSet::newParticle | ( | const fk_Vector & | pos | ) |
パーティクル生成関数2
パーティクルを指定した位置ベクトルの場所に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。
[in] | pos | 生成場所の位置ベクトル |
fk_Particle * FK::fk_ParticleSet::newParticle | ( | double | x, |
double | y, | ||
double | z | ||
) |
パーティクル生成関数3
パーティクルを指定した位置ベクトルの場所に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。
[in] | x | 生成場所の位置ベクトルのx成分 |
[in] | y | 生成場所の位置ベクトルのy成分 |
[in] | z | 生成場所の位置ベクトルのz成分 |
bool FK::fk_ParticleSet::removeParticle | ( | fk_Particle * | p | ) |
パーティクル削除関数1
指定したパーティクルを削除します。 削除したパーティクルが持っていた ID は、 新たに生成したパーティクルで再利用します。
[in] | p | 削除パーティクル |
bool FK::fk_ParticleSet::removeParticle | ( | int | ID | ) |
パーティクル削除関数2
指定した ID を持つパーティクルを削除します。 削除したパーティクルが持っていた ID は、 新たに生成したパーティクルで再利用します。
[in] | ID | 削除パーティクル ID |
unsigned int FK::fk_ParticleSet::getCount | ( | void | ) | const |
fk_Particle * FK::fk_ParticleSet::getParticle | ( | int | ID | ) | const |
パーティクルインスタンス参照関数
指定した ID を持つパーティクルインスタンスを返します。
[in] | ID | パーティクルID |
fk_Particle * FK::fk_ParticleSet::getNextParticle | ( | fk_Particle * | p | ) | const |
パーティクルインスタンス順次取得取得
存在しているパーティクルを順次取得するのに利用していきます。 引数と返値は、以下のような関係を持ちます。
以下のソースコードは、 allMethod() の中で全てのパーティクルの総和平均座標を求めているものです。 ここで、「MyPaticleSet」は fk_ParticleSet クラスを派生したものとします。
void MyParticleSet::allMethod(void) { fk_Particle *p; fk_Vector vec(0.0, 0.0, 0.0); p = getNextParticle(nullptr); while(p != nullptr) { vec += p->getPosition(); p = getNextParticle(p); } vec /= double(getParticleNum()); }
[in] | p | パーティクルインスタンス |
unsigned int FK::fk_ParticleSet::getParticleNum | ( | void | ) | const |
パーティクル個数参照関数
現在生存しているパーティクルの個数を返します。
void FK::fk_ParticleSet::setMaxSize | ( | unsigned int | max | ) |
パーティクル最大個数設定関数
パーティクル集合における、パーティクル個数の最大値を設定します。 もし生存数がこの個数に達した場合、 newParticle() を呼び出しても生成を行いません。 0 の場合無制限となります。デフォルトは 0 です。
[in] | max | 最大個数 |
unsigned int FK::fk_ParticleSet::getMaxSize | ( | void | ) | const |
パーティクル最大個数参照関数
パーティクル集合における、パーティクル個数の最大値を参照します。 もし生存数がこの個数に達した場合、 newParticle() を呼び出しても生成を行いません。 0 の場合無制限となります。デフォルトは 0 です。
void FK::fk_ParticleSet::setAllMode | ( | bool | mode | ) |
全体動作モード設定関数
handle() 呼び出し時の、 allMethod() の自動実行を制御します。 デフォルトでは true となっています。
[in] | mode | true の場合は allMethod() の自動実行を行います。 false の場合は行いません。 |
bool FK::fk_ParticleSet::getAllMode | ( | void | ) | const |
全体動作モード参照関数
handle() 呼び出し時の、 allMethod() の自動実行状態を参照します。
void FK::fk_ParticleSet::setIndivMode | ( | bool | mode | ) |
個別動作モード設定関数
handle() 呼び出し時の、 indivMethod() の自動実行を制御します。 デフォルトでは true となっています。
[in] | mode | true の場合は indivMethod() の自動実行を行います。 false の場合は行いません。 |
bool FK::fk_ParticleSet::getIndivMode | ( | void | ) | const |
個別動作モード参照関数
handle() 呼び出し時の、 indivMethod() の自動実行状態を参照します。
std::function<void(fk_Particle *)> FK::fk_ParticleSet::genMethod |
個別初期化用仮想関数
この関数は、 newParticle() によってパーティクルが生成されたときに、 自動的に実行されます。 初期状態としては特に何も行いませんが、 この関数を上書き定義することによって、 パーティクル生成時にそのパーティクルに対して様々な制御を行うことができます。
[in] | p | 新たに生成されたパーティクルインスタンス |
std::function<void(void)> FK::fk_ParticleSet::allMethod |
全体動作用仮想関数
この関数は、 handle() が呼び出された時点で自動的に実行されます。 (ただし、 setAllMode() で false が設定されている場合は呼び出されません。) 初期状態としては何も行いませんが、 この関数を上書き定義することによって、 パーティクル集合に対して様々な制御を行うことができます。
std::function<void(fk_Particle *)> FK::fk_ParticleSet::indivMethod |
個別動作用仮想関数
この関数は、 handle() が呼び出された時点で、 各パーティクル個別に自動的に実行されます。 (ただし、 setIndivMode() で false が設定されている場合は呼び出されません。) 初期状態としては何も行いませんが、 この関数を上書き定義することによって、 各パーティクルに対して様々な制御を行うことができます。
[in] | p | 個別パーティクルインスタンス |