FineKernelToolKit 4.2.13
|
グラフ構造を制御するクラス [詳解]
#include <FK/Graph.h>
公開メンバ関数 | |
fk_Graph (unsigned int num) | |
コンストラクタ | |
~fk_Graph () | |
デストラクタ | |
情報参照関数 | |
unsigned int | getNodeSize (void) |
ノード数取得関数 | |
unsigned int | getMaxEdgeID (void) |
辺ID最大値取得関数 | |
fk_GraphNode * | getNode (unsigned int ID) |
ノード取得関数 | |
std::list< fk_GraphNode * > * | getAllNode (void) |
全ノード取得関数 | |
fk_GraphEdge * | getEdge (unsigned int ID) |
辺情報取得関数 | |
std::list< fk_GraphEdge * > * | getAllEdge (void) |
全辺取得関数 | |
bool | isConnect (fk_GraphNode *v1, fk_GraphNode *v2) |
辺存在確認関数 | |
接続変更関数 | |
fk_GraphEdge * | makeEdge (bool mode, fk_GraphNode *v1, fk_GraphNode *v2) |
辺生成関数 | |
bool | deleteEdge (fk_GraphEdge *e) |
辺削除関数 | |
経路コスト制御関数 | |
bool | makeCostTable (unsigned int tableID, fk_CostType type) |
コストテーブル生成関数 | |
bool | setCostDirection (unsigned int tableID, fk_CostDirection direction) |
コスト算出方向指定関数 | |
bool | setEdgeCostID (unsigned int tableID, unsigned int edgeCostID) |
辺コストID対応指定関数 | |
unsigned int | getNodeCostID (unsigned int tableID) |
ノード内コストID参照関数 | |
void | setStart (unsigned int tableID, fk_GraphNode *node) |
出発ノード設定関数 | |
void | addGoal (unsigned int tableID, fk_GraphNode *node) |
目標ノード追加関数 | |
void | removeGoal (unsigned int tableID, fk_GraphNode *node) |
目標ノード除外関数 | |
void | clearGoal (unsigned int tableID) |
目標ノード初期化関数 | |
bool | initCostTable (unsigned int tableID) |
コストテーブル初期化関数 | |
fk_CostStatus | updateCostTable (unsigned int tableID) |
コストテーブル更新関数 | |
fk_CostStatus | getCostStatus (unsigned int tableID) |
コストテーブル状態取得関数 | |
std::list< fk_GraphNode * > | getOnePath (unsigned int tableID) |
最短経路取得関数1 | |
void | getOnePath (unsigned int tableID, std::list< fk_GraphNode * > *nodeList) |
最短経路取得関数2 | |
![]() | |
fk_Shape (fk_Type=fk_Type::SHAPE) | |
コンストラクタ | |
virtual | ~fk_Shape () |
デストラクタ | |
fk_RealShapeType | getRealShapeType (void) |
形状データ構造取得関数 | |
void | setShaderAttribute (std::string name, int dim, std::vector< int > *array, bool self=false) |
シェーダー内 attribute 変数設定関数1 | |
void | setShaderAttribute (std::string name, int dim, std::vector< float > *array, bool self=false) |
シェーダー内 attribute 変数設定関数2 | |
void | setShaderAttribute (std::string name, int dim, std::vector< fk_Vector > *array) |
シェーダー内 attribute 変数設定関数3 | |
void | setShaderAttribute (std::string name, int dim, std::vector< fk_TexCoord > *array) |
シェーダー内 attribute 変数設定関数4 | |
void | setShaderAttribute (std::string name, int dim, std::vector< fk_HVector > *array) |
シェーダー内 attribute 変数設定関数5 | |
void | modifyAttribute (std::string name) |
attribute 変数更新関数 | |
![]() | |
fk_Attribute (void) | |
コンストラクタ | |
virtual | ~fk_Attribute () |
デストラクタ | |
bool | setAttrII (const int key, const int value) |
キーが int 型、値が int 型である属性設定関数 | |
bool | setAttrID (const int key, const double value) |
キーが int 型、値が double 型である属性設定関数 | |
bool | setAttrIS (const int key, const std::string value) |
キーが int 型、値が std::string 型である属性設定関数 | |
bool | setAttrSI (const std::string key, const int value) |
キーが std::string 型、値が int 型である属性設定関数 | |
bool | setAttrSD (const std::string key, const double value) |
キーが std::string 型、値が double 型である属性設定関数 | |
bool | setAttrSS (const std::string key, const std::string value) |
キーが std::string 型、値が std::string 型である属性設定関数 | |
int | getAttrII (const int key) const |
キーが int 型、値が int 型である属性参照関数 | |
double | getAttrID (const int key) const |
キーが int 型、値が double 型である属性参照関数 | |
std::string | getAttrIS (const int key) const |
キーが int 型、値が std::string 型である属性参照関数 | |
int | getAttrSI (const std::string key) const |
キーが std::string 型、値が int 型である属性参照関数 | |
double | getAttrSD (const std::string key) const |
キーが std::string 型、値が double 型である属性参照関数 | |
std::string | getAttrSS (const std::string key) const |
キーが std::string 型、値が std::string 型である属性参照関数 | |
bool | existAttrII (const int key) const |
キーが int 型、値が int 型である属性存在参照関数 | |
bool | existAttrID (const int key) const |
キーが int 型、値が double 型である属性存在参照関数 | |
bool | existAttrIS (const int key) const |
キーが int 型、値が std::string 型である属性存在参照関数 | |
bool | existAttrSI (const std::string key) const |
キーが std::string 型、値が int 型である属性存在参照関数 | |
bool | existAttrSD (const std::string key) const |
キーが std::string 型、値が double 型である属性存在参照関数 | |
bool | existAttrSS (const std::string key) const |
キーが std::string 型、値が std::string 型である属性存在参照関数 | |
bool | deleteAttrII (const int key) |
キーが int 型、値が int 型である属性消去関数 | |
bool | deleteAttrID (const int key) |
キーが int 型、値が double 型である属性消去関数 | |
bool | deleteAttrIS (const int key) |
キーが int 型、値が std::string 型である属性消去関数 | |
bool | deleteAttrSI (const std::string key) |
キーが std::string 型、値が int 型である属性消去関数 | |
bool | deleteAttrSD (const std::string key) |
キーが std::string 型、値が double 型である属性消去関数 | |
bool | deleteAttrSS (const std::string key) |
キーが std::string 型、値が std::string 型である属性消去関数 | |
![]() | |
fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT) | |
コンストラクタ | |
fk_Type | getObjectType (void) const |
タイプ取得関数 | |
グラフ構造を制御するクラス
このクラスは、グラフ構造を制御する機能を提供します。 グラフ構造には多くの応用用途がありますが、 本クラスではその中でも経路探索を念頭に置いた機能を多く提供しています。
グラフ構造は、「ノード」と「辺」の2種類の要素によって構成されます。 ノードは任意の位置を持つ頂点集合であり、 辺は任意の2点を接続する線分です。 辺は無向線分としても有向線分としても考えることができ、 経路としてとらえると無向線分は両通行経路、有向線分は一方通行経路となります。
ノードを表すクラスは fk_GraphNode, 辺を表すクラスは fk_GraphEdge であり、 これらのクラスの機能も合わせて利用します。
fk_Graph のノードと辺は、「コスト」を格納することができます。 グラフ内の全要素のコストをまとめて「コストテーブル」と呼びます。 コストテーブルは、経路探索アルゴリズムで重要なデータであり、 fk_Graph はコストを扱うために有用な機能を多く提供しています。
コストテーブルは、int 型と double 型のいずれかを選択でき、 かつ両方の型それぞれで複数のコストテーブルを格納することができます。 各コストテーブルは ID により管理します。
FK::fk_Graph::fk_Graph | ( | unsigned int | num | ) |
FK::fk_Graph::~fk_Graph | ( | ) |
デストラクタ
unsigned int FK::fk_Graph::getNodeSize | ( | void | ) |
ノード数取得関数
グラフ内に存在するノード数を取得します。
unsigned int FK::fk_Graph::getMaxEdgeID | ( | void | ) |
辺ID最大値取得関数
現在存在する辺の ID の最大値を取得します。
fk_GraphNode * FK::fk_Graph::getNode | ( | unsigned int | ID | ) |
ノード取得関数
ノードを表すインスタンスを ID より取得します。
[in] | ID | ノード ID |
std::list< fk_GraphNode * > * FK::fk_Graph::getAllNode | ( | void | ) |
fk_GraphEdge * FK::fk_Graph::getEdge | ( | unsigned int | ID | ) |
辺情報取得関数
辺を表すインスタンスを ID より取得します。
[in] | ID | 辺 ID |
std::list< fk_GraphEdge * > * FK::fk_Graph::getAllEdge | ( | void | ) |
bool FK::fk_Graph::isConnect | ( | fk_GraphNode * | v1, |
fk_GraphNode * | v2 | ||
) |
辺存在確認関数
2つのノードの間に辺が存在するかどうかを判定します。 なお、ノード間の辺は複数存在する場合もあり、2本以上存在する場合も true を返します。
[in] | v1 | 辺の端点となるノード。 |
[in] | v2 | 辺の端点となるノード。 |
fk_GraphEdge * FK::fk_Graph::makeEdge | ( | bool | mode, |
fk_GraphNode * | v1, | ||
fk_GraphNode * | v2 | ||
) |
辺生成関数
2点のノード間に辺を作成します。 なお、既に2点間に辺が存在する場合でも、エラーとならずに新たに辺を追加生成します。
[in] | mode | true の場合無向、false の場合有向となります。 辺が経路を表す場合は、有向辺は一方通行を表します。 |
[in] | v1 | 辺の始点となるノード。 |
[in] | v2 | 辺の終点となるノード。 |
bool FK::fk_Graph::deleteEdge | ( | fk_GraphEdge * | e | ) |
辺削除関数
辺を削除します。
[in] | e | 削除する辺のインスタンス |
bool FK::fk_Graph::makeCostTable | ( | unsigned int | tableID, |
fk_CostType | type | ||
) |
コストテーブル生成関数
コストテーブルを作成します。作成の際には ID を指定します。 指定した ID で既に作成済であった場合は false を返し、初期化は行いません。
[in] | tableID | コストテーブル ID |
[in] | type | コスト値のタイプを設定します。
|
bool FK::fk_Graph::setCostDirection | ( | unsigned int | tableID, |
fk_CostDirection | direction | ||
) |
コスト算出方向指定関数
コストの算出方向を指定します。
[in] | tableID | コストテーブルID |
[in] | direction | コストを出発ノード側から算出する場合は fk_CostDirection::FORWARD を指定します。 コストを目標ノード側から算出する場合は fk_CostDirection::BACK を指定します。 |
bool FK::fk_Graph::setEdgeCostID | ( | unsigned int | tableID, |
unsigned int | edgeCostID | ||
) |
辺コストID対応指定関数
コストテーブルに対し、コスト値算出に利用する辺のコストIDを指定します。
[in] | tableID | コストテーブルID |
[in] | edgeCostID | 利用する辺のコスト値 ID を指定します。 makeCostTable() の第2引数に fk_CostType::LENGTH を指定していた場合、 この値は無視されます。 |
unsigned int FK::fk_Graph::getNodeCostID | ( | unsigned int | tableID | ) |
ノード内コストID参照関数
コストテーブルに対応するノード内コストIDを参照します。
[in] | tableID | コストテーブルID |
void FK::fk_Graph::setStart | ( | unsigned int | tableID, |
fk_GraphNode * | node | ||
) |
出発ノード設定関数
経路探索における出発ノードを指定します。 既に別の出発ノードが設定されていた場合は、新たに設定したノードに更新されます。
[in] | tableID | コストテーブルID |
[in] | node | ノードインスタンス |
void FK::fk_Graph::addGoal | ( | unsigned int | tableID, |
fk_GraphNode * | node | ||
) |
目標ノード追加関数
経路探索における目標ノードを追加します。 目標ノードは一つのコストテーブルに対し複数設定することができます。
[in] | tableID | コストテーブルID |
[in] | node | 目標ノードインスタンス |
void FK::fk_Graph::removeGoal | ( | unsigned int | tableID, |
fk_GraphNode * | node | ||
) |
目標ノード除外関数
対象ノードを、目標ノードから除外します。
[in] | tableID | コストテーブルID |
[in] | node | 目標ノードインスタンス |
void FK::fk_Graph::clearGoal | ( | unsigned int | tableID | ) |
目標ノード初期化関数
現時点で登録されている目標ノードを全て除外します。
[in] | tableID | コストテーブルID |
bool FK::fk_Graph::initCostTable | ( | unsigned int | tableID | ) |
コストテーブル初期化関数
コストテーブルを初期化します。
[in] | tableID | コストテーブルID |
fk_CostStatus FK::fk_Graph::updateCostTable | ( | unsigned int | tableID | ) |
コストテーブル更新関数
各ノードに対し、コスト算出を一段階進めます。 全てのノードのコスト値を完全にするには、 fk_CostStatus::FINISH が返されるまで繰り返し本関数を呼び出す必要があります。
[in] | tableID | コストテーブルID |
fk_CostStatus FK::fk_Graph::getCostStatus | ( | unsigned int | tableID | ) |
コストテーブル状態取得関数
現在のコストテーブルにおける更新情報を取得します。 updateCostTable() では実際にコストテーブルの更新処理を行いますが、 本関数は更新処理は行わず状態のみを取得します。
[in] | tableID | コストテーブルID |
std::list< fk_GraphNode * > FK::fk_Graph::getOnePath | ( | unsigned int | tableID | ) |
最短経路取得関数1
コストテーブルに基づいた、出発ノードから目標ノードまでの最短経路を取得します。 本関数を用いる際には、事前にコストテーブルの更新が完了し、 getCostStatus() による結果が fk_CostStatus::FINISH となる状況でなければなりません。
最短経路が複数存在するような場合、任意の1種類のみを取得します。 現状では全ての最短経路を取得する機能は提供していません。
目標ノードが複数ある場合、そのうち出発ノードからもっとも経路が短いものが抽出されます。
本関数は STL コンテナを直接返すため、 経路情報が大きい場合はコピーの演算コストが増大します。 速度を重視する場合は getOnePath(unsigned int, std::list<fk_GraphNode *> *) の利用を推奨します。
[in] | tableID | 経路探索に用いる コストテーブルの ID |
void FK::fk_Graph::getOnePath | ( | unsigned int | tableID, |
std::list< fk_GraphNode * > * | nodeList | ||
) |
最短経路取得関数2
コストテーブルに基づいた、出発ノードから目標ノードまでの最短経路を取得します。 本関数を用いる際には、事前にコストテーブルの更新が完了し、 getCostStatus() による結果が fk_CostStatus::FINISH となる状況でなければなりません。
最短経路が複数存在するような場合、任意の1種類のみを取得します。 現状では全ての最短経路を取得する機能は提供していません。
目標ノードが複数ある場合、そのうち出発ノードからもっとも経路が短いものが抽出されます。
[in] | tableID | 経路探索に用いる コストテーブルの ID |
[out] | nodeList | 最短経路の経由地となるノードを、経路順に格納します。 |