FineKernelToolKit: FK::fk_Ray クラス

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
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_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::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 | ) |

直線群種類選択関数

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

- 直線: fk_LineType::OPEN
- 半直線: fk_LineType::HALF
- 有向線分: fk_LineType::CLOSE

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

引数

  [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] | sort | true の場合、list の順番が光線に当たった順(パラメータの昇順)になります。 false の場合は entryModel() で登録した順にならびます。

参照
  entryModel(), removeModel(), getInter(), getPos()