FineKernelToolKit 4.2.13
|
干渉判定光線クラス [詳解]
#include <FK/Ray.h>
公開メンバ関数 | |
fk_Ray (void) | |
コンストラクタ1 | |
fk_Ray (fk_Vector S, fk_Vector E) | |
コンストラクタ2 | |
~fk_Ray () | |
デストラクタ | |
bool | set (fk_Vector S, fk_Vector E) |
端点設定関数 | |
bool | setStart (fk_Vector S) |
始点設定関数 | |
bool | setEnd (fk_Vector E) |
終点設定関数 | |
std::tuple< fk_Vector, fk_Vector > | get (void) |
端点取得関数 | |
void | setType (fk_LineType type) |
直線群種類選択関数 | |
fk_LineType | getType (void) |
直線群種類取得関数 | |
bool | isInter (fk_Model *model) |
干渉状態取得関数 | |
std::tuple< bool, double > | getInter (fk_Model *model) |
干渉位置取得関数 | |
fk_Vector | getPos (double t) |
光線位置ベクトル取得関数 | |
fk_Model * | getModel (void) |
モデルインスタンス取得関数 | |
void | setParent (fk_Model *model) |
親モデル設定関数 | |
void | setColor (fk_Color *color) |
光線色設定関数1 | |
void | setColor (float r, float g, float b) |
光線色設定関数2 | |
fk_Color * | getColor (void) |
光線色取得関数 | |
void | setDrawScale (double scale) |
直線・半直線延長率設定関数 | |
double | getDrawScale (void) |
直線・半直線延長率取得関数 | |
void | entryModel (fk_Model *model) |
干渉判定対象モデル登録関数 | |
void | removeModel (fk_Model *model) |
干渉判定対称モデル解除関数 | |
void | getInterList (std::list< std::tuple< fk_Model *, double > > *list, bool sort=true) |
一括干渉判定関数 | |
![]() | |
fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT) | |
コンストラクタ | |
fk_Type | getObjectType (void) const |
タイプ取得関数 | |
干渉判定光線クラス
このクラスは、空間中のモデルと干渉判定を行う光線を扱う機能を提供します。 モデルとの干渉計算に用いる形状は厳密なものではなく、 fk_Boundary クラスによる境界ボリュームとなります。 fk_Model 側で設定されている境界ボリュームの種類と大きさに対し、干渉計算を行います。 本クラスのインタンスは独立した光線として各モデルと干渉判定を行うことができます。 あるいは、 entryModel() を用いて判定対象となるモデルを登録しておき、 getInterList() によって一括して干渉モデルを得ることも可能です。
光線は直線、半直線、有向線分から選択することができます。
FK::fk_Ray::fk_Ray | ( | void | ) |
コンストラクタ1
初期状態として、始点を原点、終点を (0, 0, -1) とする光線が生成されます。
コンストラクタ2
引数として、始点と終点が入力できます。 始点と終点が同一だった場合、 始点を原点、終点を (0, 0, -1) とする光線が生成されます。
[in] | S | 始点ベクトル |
[in] | E | 終点ベクトル |
FK::fk_Ray::~fk_Ray | ( | ) |
デストラクタ
端点設定関数
両端点を設定します。 始点と終点が同一だった場合、設定を変更せずに false を返します。
[in] | S | 始点ベクトル |
[in] | E | 終点ベクトル |
bool FK::fk_Ray::setStart | ( | fk_Vector | S | ) |
始点設定関数
始点を設定します。 始点と終点が同一だった場合、設定を変更せずに false を返します。
[in] | S | 始点ベクトル |
bool FK::fk_Ray::setEnd | ( | fk_Vector | E | ) |
終点設定関数
終点を設定します。 始点と終点が同一だった場合、設定を変更せずに false を返します。
[in] | E | 始点ベクトル |
端点取得関数
始点と終点を取得します。
void FK::fk_Ray::setType | ( | fk_LineType | type | ) |
直線群種類選択関数
光線の種類を設定します。以下の中から選択できます。
なお、ここでの設定は干渉判定と共に、描画にも反映されます。
[in] | type | 種類 |
fk_LineType FK::fk_Ray::getType | ( | void | ) |
bool FK::fk_Ray::isInter | ( | fk_Model * | model | ) |
干渉状態取得関数
光線とモデルが干渉しているかどうかを判定します。
[in] | model | 判定対象モデル |
std::tuple< bool, double > FK::fk_Ray::getInter | ( | fk_Model * | model | ) |
fk_Vector FK::fk_Ray::getPos | ( | double | t | ) |
光線位置ベクトル取得関数
光線のパラメータから位置ベクトルを取得します。 以下の式は、光線の始点を S, 終点を E とした場合の干渉点位置 P をパラメータ表現したものです。
\[ \mathbf{P} = (1 - t)\mathbf{S} + t\mathbf{E} \]
getInter() によって得られたパラメータから、本関数を利用して位置ベクトルを取得することができます。
[in] | t | 光線パラメータ |
fk_Model * FK::fk_Ray::getModel | ( | void | ) |
モデルインスタンス取得関数
void FK::fk_Ray::setParent | ( | fk_Model * | model | ) |
void FK::fk_Ray::setColor | ( | fk_Color * | color | ) |
光線色設定関数1
光線の色を設定します。
[in] | color | 光線色 |
void FK::fk_Ray::setColor | ( | float | r, |
float | g, | ||
float | b | ||
) |
光線色設定関数2
光線の色を設定します。
[in] | r | 赤要素値。0 から 1 までの実数をとります。 |
[in] | g | 青要素値。0 から 1 までの実数をとります。 |
[in] | b | 緑要素値。0 から 1 までの実数をとります。 |
fk_Color * FK::fk_Ray::getColor | ( | void | ) |
void FK::fk_Ray::setDrawScale | ( | double | scale | ) |
直線・半直線延長率設定関数
直線の両端や半直線の終点側の無限直線の描画時の延長率を設定します。 無限直線の描画は、線分に対しこの延長率で示した倍率まで延長して描画を行います。 デフォルトでは 100 になっています。
[in] | scale | 延長率 |
double FK::fk_Ray::getDrawScale | ( | void | ) |
直線・半直線延長率取得関数
直線の両端や半直線の終点側の無限直線の描画時の延長率を取得します。
void FK::fk_Ray::entryModel | ( | fk_Model * | model | ) |
干渉判定対象モデル登録関数
getInterList() で取得するモデルを登録します。 複数のモデルに対し同時に干渉判定を行う場合は、 getInterList() を用いるのが便利です。
[in] | model | 干渉判定対象モデル |
void FK::fk_Ray::removeModel | ( | fk_Model * | model | ) |
void FK::fk_Ray::getInterList | ( | std::list< std::tuple< fk_Model *, double > > * | list, |
bool | sort = true |
||
) |
一括干渉判定関数
entryModel() によって登録したモデル群に対し、一括して干渉判定を行います。
[out] | list | 干渉していたモデルの情報が格納されます。 list 要素中の第1要素は、干渉していたモデルのインスタンスが入ります。 第2要素は、干渉箇所のパラメータが入ります。 パラメータの詳細は getInter() の説明を参照して下さい。 |
[in] | sort | true の場合、list の順番が光線に当たった順(パラメータの昇順)になります。 false の場合は entryModel() で登録した順にならびます。 |