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

干渉判定光線クラス [詳解]

#include <FK/Ray.h>

+ FK::fk_Ray の継承関係図
+ FK::fk_Ray 連携図

公開メンバ関数

 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_Vectorget (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_ModelgetModel (void)
 モデルインスタンス取得関数
 
void setParent (fk_Model *model)
 親モデル設定関数
 
void setColor (fk_Color *color)
 光線色設定関数1
 
void setColor (float r, float g, float b)
 光線色設定関数2
 
fk_ColorgetColor (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::fk_BaseObject に属する継承公開メンバ関数
 fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT)
 コンストラクタ
 
fk_Type getObjectType (void) const
 タイプ取得関数
 

詳解

干渉判定光線クラス

このクラスは、空間中のモデルと干渉判定を行う光線を扱う機能を提供します。 モデルとの干渉計算に用いる形状は厳密なものではなく、 fk_Boundary クラスによる境界ボリュームとなります。 fk_Model 側で設定されている境界ボリュームの種類と大きさに対し、干渉計算を行います。 本クラスのインタンスは独立した光線として各モデルと干渉判定を行うことができます。 あるいは、 entryModel() を用いて判定対象となるモデルを登録しておき、 getInterList() によって一括して干渉モデルを得ることも可能です。

光線は直線、半直線、有向線分から選択することができます。

参照
fk_Model, fk_Boundary, fk_Math, fk_Plane

構築子と解体子

◆ fk_Ray() [1/2]

FK::fk_Ray::fk_Ray ( void  )

コンストラクタ1

初期状態として、始点を原点、終点を (0, 0, -1) とする光線が生成されます。

◆ fk_Ray() [2/2]

FK::fk_Ray::fk_Ray ( fk_Vector  S,
fk_Vector  E 
)

コンストラクタ2

引数として、始点と終点が入力できます。 始点と終点が同一だった場合、 始点を原点、終点を (0, 0, -1) とする光線が生成されます。

引数
[in]S始点ベクトル
[in]E終点ベクトル

◆ ~fk_Ray()

FK::fk_Ray::~fk_Ray ( )

デストラクタ

関数詳解

◆ set()

bool FK::fk_Ray::set ( fk_Vector  S,
fk_Vector  E 
)

端点設定関数

両端点を設定します。 始点と終点が同一だった場合、設定を変更せずに false を返します。

引数
[in]S始点ベクトル
[in]E終点ベクトル
戻り値
設定に成功すれば true を、失敗すれば false を返します。

◆ setStart()

bool FK::fk_Ray::setStart ( fk_Vector  S)

始点設定関数

始点を設定します。 始点と終点が同一だった場合、設定を変更せずに false を返します。

引数
[in]S始点ベクトル
戻り値
設定に成功すれば true を、失敗すれば false を返します。

◆ setEnd()

bool FK::fk_Ray::setEnd ( fk_Vector  E)

終点設定関数

終点を設定します。 始点と終点が同一だった場合、設定を変更せずに false を返します。

引数
[in]E始点ベクトル
戻り値
設定に成功すれば true を、失敗すれば false を返します。

◆ get()

std::tuple< fk_Vector, fk_Vector > FK::fk_Ray::get ( void  )

端点取得関数

始点と終点を取得します。

戻り値
第1要素を始点、第2要素を終点とするタプル型を返します。

◆ setType()

void FK::fk_Ray::setType ( fk_LineType  type)

直線群種類選択関数

光線の種類を設定します。以下の中から選択できます。

なお、ここでの設定は干渉判定と共に、描画にも反映されます。

引数
[in]type種類
参照
getType()

◆ getType()

fk_LineType FK::fk_Ray::getType ( void  )

直線群種類取得関数

光線の種類を取得します。

戻り値
種類
参照
setType()

◆ isInter()

bool FK::fk_Ray::isInter ( fk_Model model)

干渉状態取得関数

光線とモデルが干渉しているかどうかを判定します。

引数
[in]model判定対象モデル
戻り値
干渉していれば true を、していなければ false を返します。
参照
getInter(), getPos()

◆ getInter()

std::tuple< bool, double > FK::fk_Ray::getInter ( fk_Model model)

干渉位置取得関数

光線とモデルの干渉状態と、干渉位置を表すパラメータを取得します。

引数
[in]model判定対象モデル
戻り値
第1要素は、干渉していれば true を、していなければ false を返します。 第2要素は、干渉位置パラメータ t を返します。 以下の式は、光線の始点を S, 終点を E とした場合の干渉点位置 P をパラメータ表現したものです。

\[ \mathbf{P} = (1 - t)\mathbf{S} + t\mathbf{E} \]

参照
isInter(), getPos()

◆ getPos()

fk_Vector FK::fk_Ray::getPos ( double  t)

光線位置ベクトル取得関数

光線のパラメータから位置ベクトルを取得します。 以下の式は、光線の始点を S, 終点を E とした場合の干渉点位置 P をパラメータ表現したものです。

\[ \mathbf{P} = (1 - t)\mathbf{S} + t\mathbf{E} \]

getInter() によって得られたパラメータから、本関数を利用して位置ベクトルを取得することができます。

引数
[in]t光線パラメータ
戻り値
パラメータ t が示す位置ベクトル
参照
getInter()

◆ getModel()

fk_Model * FK::fk_Ray::getModel ( void  )

モデルインスタンス取得関数

◆ setParent()

void FK::fk_Ray::setParent ( fk_Model model)

親モデル設定関数

本光線のモデルに対し、親モデルを設定します。 設定後は、親モデルの移動や回転に追従します。

引数
[in]model親モデルインスタンス
参照
getModel()

◆ setColor() [1/2]

void FK::fk_Ray::setColor ( fk_Color color)

光線色設定関数1

光線の色を設定します。

引数
[in]color光線色

◆ setColor() [2/2]

void FK::fk_Ray::setColor ( float  r,
float  g,
float  b 
)

光線色設定関数2

光線の色を設定します。

引数
[in]r赤要素値。0 から 1 までの実数をとります。
[in]g青要素値。0 から 1 までの実数をとります。
[in]b緑要素値。0 から 1 までの実数をとります。

◆ getColor()

fk_Color * FK::fk_Ray::getColor ( void  )

光線色取得関数

光線の色を取得します。

戻り値
光線色
参照
setColor(fk_Color *), setColor(float, float, float)

◆ setDrawScale()

void FK::fk_Ray::setDrawScale ( double  scale)

直線・半直線延長率設定関数

直線の両端や半直線の終点側の無限直線の描画時の延長率を設定します。 無限直線の描画は、線分に対しこの延長率で示した倍率まで延長して描画を行います。 デフォルトでは 100 になっています。

引数
[in]scale延長率

◆ getDrawScale()

double FK::fk_Ray::getDrawScale ( void  )

直線・半直線延長率取得関数

直線の両端や半直線の終点側の無限直線の描画時の延長率を取得します。

戻り値
延長率

◆ entryModel()

void FK::fk_Ray::entryModel ( fk_Model model)

干渉判定対象モデル登録関数

getInterList() で取得するモデルを登録します。 複数のモデルに対し同時に干渉判定を行う場合は、 getInterList() を用いるのが便利です。

引数
[in]model干渉判定対象モデル
参照
isInter(), getInter(), removeModel(), getInterList()

◆ removeModel()

void FK::fk_Ray::removeModel ( fk_Model model)

干渉判定対称モデル解除関数

entryModel() によって登録したモデルを、対象から解除します。

引数
[in]model干渉判定解除モデル
参照
entryModel(), getInterList()

◆ getInterList()

void FK::fk_Ray::getInterList ( std::list< std::tuple< fk_Model *, double > > *  list,
bool  sort = true 
)

一括干渉判定関数

entryModel() によって登録したモデル群に対し、一括して干渉判定を行います。

引数
[out]list干渉していたモデルの情報が格納されます。 list 要素中の第1要素は、干渉していたモデルのインスタンスが入ります。 第2要素は、干渉箇所のパラメータが入ります。 パラメータの詳細は getInter() の説明を参照して下さい。
[in]sorttrue の場合、list の順番が光線に当たった順(パラメータの昇順)になります。 false の場合は entryModel() で登録した順にならびます。
参照
entryModel(), removeModel(), getInter(), getPos()