FineKernelToolKit: FK::fk_ParticleSet クラス

FineKernelToolKit 4.3.0

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

パーティクル集合を制御するクラス [詳解]

`#include <FK/ParticleSet.h>`

FK::fk_ParticleSet の継承関係図
[凡例]
FK::fk_ParticleSet 連携図
[凡例]

## 公開メンバ関数

| 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::fk_BaseObject に属する継承公開メンバ関数
| 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
| 個別動作用仮想関数

## 詳解

パーティクル集合を制御するクラス

このクラスは、パーティクル集合を制御する機能を提供します。

「パーティクル」とは粒子のことで、流体表現などに利用します。 本クラスは、そのままインスタンスを生成して利用するのではなく、 このクラスの継承クラスに対して仮想関数を上書きして利用することを想定しています。 具体的には、以下のような手順となります。

1. まず fk_ParticleSet を継承したクラスを準備します。
2. そのクラスで、各種仮想関数の上書きによってパーティクルの挙動を記述します。
3. 新しいクラスのインスタンスを作成し、 getShape() を使ってモデルに登録しておきます。 もちろん、そのモデルはシーンに登録しておく必要があります。
4. 描画ループの中で handle() を呼び出す。

このクラスと同様に点群を扱うクラスとして、 fk_Point があります。 fk_Particle や fk_ParticleSet が法則を記述することが主であることに対し、 fk_Point では点の制御をより直接的に行います。

参照
  fk_Particle, fk_Point

## 構築子と解体子

## ◆ fk_ParticleSet()

FK::fk_ParticleSet::fk_ParticleSet | ( | unsigned int | max = 0 | ) |

コンストラクタ

初期値として、パーティクル最大個数をとります。

引数

  [in] | max | パーティクル最大個数

## ◆ ~fk_ParticleSet()

virtual FK::fk_ParticleSet::~fk_ParticleSet | ( |  | ) |

virtual

デストラクタ

## 関数詳解

## ◆ handle()

void FK::fk_ParticleSet::handle | ( | void |  | ) |

実行関数

パーティクル集合および各パーティクルに対し、時間経過処理を実行します。 具体的には、以下の処理が行われます。

- 各パーティクルの fk_Particle::handle() 実行。
- パーティクル集合および各パーティクルの年齢に 1 を追加。

## ◆ getShape()

fk_Shape * FK::fk_ParticleSet::getShape | ( | void |  | ) | const

モデル設定用関数

モデルに形状を設定するための関数です。

戻り値
  形状インスタンス

覚え書き
  現時点では、この形状インスタンスの型は fk_Point になっています。 しかし、将来においてはこの型が変更となる可能性があります。 この関数で得られるインスタンスが fk_Point であることを前提とするような記述を行った場合、 将来のバージョンにおいて問題が生じる可能性があります。

## ◆ newParticle() [1/3]

fk_Particle * FK::fk_ParticleSet::newParticle | ( | void |  | ) |

パーティクル生成関数1

パーティクルを原点上に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。

戻り値
  生成した場合、新たなパーティクルのインスタンスを返します。 失敗した場合は nullptr を返します。

## ◆ newParticle() [2/3]

fk_Particle * FK::fk_ParticleSet::newParticle | ( | const fk_Vector & | pos | ) |

パーティクル生成関数2

パーティクルを指定した位置ベクトルの場所に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。

引数

  [in] | pos | 生成場所の位置ベクトル

戻り値
  生成した場合、新たなパーティクルのインスタンスを返します。 失敗した場合は nullptr を返します。

## ◆ newParticle() [3/3]

fk_Particle * FK::fk_ParticleSet::newParticle | ( | double | x,
|  | double | y,
|  | double | z )

パーティクル生成関数3

パーティクルを指定した位置ベクトルの場所に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。

引数

  [in] | x | 生成場所の位置ベクトルのx成分
  [in] | y | 生成場所の位置ベクトルのy成分
  [in] | z | 生成場所の位置ベクトルのz成分

戻り値
  生成した場合、新たなパーティクルのインスタンスを返します。 失敗した場合は nullptr を返します。

## ◆ removeParticle() [1/2]

bool FK::fk_ParticleSet::removeParticle | ( | fk_Particle * | p | ) |

パーティクル削除関数1

指定したパーティクルを削除します。 削除したパーティクルが持っていた ID は、 新たに生成したパーティクルで再利用します。

引数

  [in] | p | 削除パーティクル

戻り値
  削除に成功すれば true を、失敗すれば false を返します。

## ◆ removeParticle() [2/2]

bool FK::fk_ParticleSet::removeParticle | ( | int | ID | ) |

パーティクル削除関数2

指定した ID を持つパーティクルを削除します。 削除したパーティクルが持っていた ID は、 新たに生成したパーティクルで再利用します。

引数

  [in] | ID | 削除パーティクル ID

戻り値
  削除に成功すれば true を、失敗すれば false を返します。

## ◆ getCount()

unsigned int FK::fk_ParticleSet::getCount | ( | void |  | ) | const

年齢参照関数

パーティクル集合の年齢を参照します。 年齢とは、パーティクル集合が生成されてから handle() が呼ばれた回数のことです。

戻り値
  年齢

## ◆ getParticle()

fk_Particle * FK::fk_ParticleSet::getParticle | ( | int | ID | ) | const

パーティクルインスタンス参照関数

指定した ID を持つパーティクルインスタンスを返します。

引数

  [in] | ID | パーティクルID

戻り値
  存在した場合はインスタンスを、存在しない場合は nullptr を返します。

## ◆ getNextParticle()

fk_Particle * FK::fk_ParticleSet::getNextParticle | ( | fk_Particle * | p | ) | const

パーティクルインスタンス順次取得取得

存在しているパーティクルを順次取得するのに利用していきます。 引数と返値は、以下のような関係を持ちます。

- 引数が nullptr の場合は、IDが最も小さなパーティクルを返します。
- 引数のパーティクルに対し、次の大きな ID を持つパーティクルを返します。
- もし引数のパーティクルの ID が最大のものであった場合は、 nullptr を返します。

以下のソースコードは、 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 | パーティクルインスタンス

戻り値
  上記解説を参照して下さい。

## ◆ getParticleNum()

unsigned int FK::fk_ParticleSet::getParticleNum | ( | void |  | ) | const

パーティクル個数参照関数

現在生存しているパーティクルの個数を返します。

戻り値
  パーティクル個数

## ◆ setMaxSize()

void FK::fk_ParticleSet::setMaxSize | ( | unsigned int | max | ) |

パーティクル最大個数設定関数

パーティクル集合における、パーティクル個数の最大値を設定します。 もし生存数がこの個数に達した場合、 newParticle() を呼び出しても生成を行いません。 0 の場合無制限となります。デフォルトは 0 です。

引数

  [in] | max | 最大個数

## ◆ getMaxSize()

unsigned int FK::fk_ParticleSet::getMaxSize | ( | void |  | ) | const

パーティクル最大個数参照関数

パーティクル集合における、パーティクル個数の最大値を参照します。 もし生存数がこの個数に達した場合、 newParticle() を呼び出しても生成を行いません。 0 の場合無制限となります。デフォルトは 0 です。

戻り値
  最大個数

## ◆ setAllMode()

void FK::fk_ParticleSet::setAllMode | ( | bool | mode | ) |

全体動作モード設定関数

handle() 呼び出し時の、 allMethod() の自動実行を制御します。 デフォルトでは true となっています。

引数

  [in] | mode | true の場合は allMethod() の自動実行を行います。 false の場合は行いません。

## ◆ getAllMode()

bool FK::fk_ParticleSet::getAllMode | ( | void |  | ) | const

全体動作モード参照関数

handle() 呼び出し時の、 allMethod() の自動実行状態を参照します。

戻り値
  true の場合は allMethod() の自動実行を行います。 false の場合は行いません。

## ◆ setIndivMode()

void FK::fk_ParticleSet::setIndivMode | ( | bool | mode | ) |

個別動作モード設定関数

handle() 呼び出し時の、 indivMethod() の自動実行を制御します。 デフォルトでは true となっています。

引数

  [in] | mode | true の場合は indivMethod() の自動実行を行います。 false の場合は行いません。

## ◆ getIndivMode()

bool FK::fk_ParticleSet::getIndivMode | ( | void |  | ) | const

個別動作モード参照関数

handle() 呼び出し時の、 indivMethod() の自動実行状態を参照します。

戻り値
  true の場合は indivMethod() の自動実行を行います。 false の場合は行いません。

## メンバ詳解

## ◆ genMethod

std::function<void(fk_Particle *)> FK::fk_ParticleSet::genMethod

個別初期化用仮想関数

この関数は、 newParticle() によってパーティクルが生成されたときに、 自動的に実行されます。 初期状態としては特に何も行いませんが、 この関数を上書き定義することによって、 パーティクル生成時にそのパーティクルに対して様々な制御を行うことができます。

引数

  [in] | p | 新たに生成されたパーティクルインスタンス

## ◆ allMethod

std::function<void(void)> FK::fk_ParticleSet::allMethod

全体動作用仮想関数

この関数は、 handle() が呼び出された時点で自動的に実行されます。 (ただし、 setAllMode() で false が設定されている場合は呼び出されません。) 初期状態としては何も行いませんが、 この関数を上書き定義することによって、 パーティクル集合に対して様々な制御を行うことができます。

## ◆ indivMethod

std::function<void(fk_Particle *)> FK::fk_ParticleSet::indivMethod

個別動作用仮想関数

この関数は、 handle() が呼び出された時点で、 各パーティクル個別に自動的に実行されます。 (ただし、 setIndivMode() で false が設定されている場合は呼び出されません。) 初期状態としては何も行いませんが、 この関数を上書き定義することによって、 各パーティクルに対して様々な制御を行うことができます。

引数

  [in] | p | 個別パーティクルインスタンス