FineKernelToolKit: FK_CLI::fk_Graph クラス

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | プロパティ | 全メンバ一覧
FK_CLI::fk_Graph クラス

グラフ構造を制御するクラス [詳解]

`#include <CLI/FK_CLI/include/Graph_CLI.h>`

FK_CLI::fk_Graph の継承関係図
[凡例]
FK_CLI::fk_Graph 連携図
[凡例]

## 公開メンバ関数

| fk_Graph (unsigned int num)
| コンストラクタ
| ~fk_Graph ()
| デストラクタ
| !fk_Graph ()
| ファイナライザ
fk_GraphNode ^ | GetNode (unsigned int ID)
| ノード取得メソッド
List< fk_GraphNode ^> ^ | GetAllNode (void)
| 全ノード取得メソッド
fk_GraphEdge ^ | GetEdge (unsigned int ID)
| 辺情報取得メソッド
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)
| コストテーブル状態取得メソッド
List< fk_GraphNode^> ^ | GetOnePath (unsigned int tableID)
| 最短経路取得メソッド
基底クラス FK_CLI::fk_Shape に属する継承公開メンバ関数
void | SetShaderAttribute (String^ name, int dim, IEnumerable< int >^ array)
| シェーダー内 attribute 変数設定メソッド1
void | SetShaderAttribute (String^ name, int dim, IEnumerable< float >^ array)
| シェーダー内 attribute 変数設定メソッド2
void | SetShaderAttribute (String^ name, int dim, IEnumerable< double >^ array)
| シェーダー内 attribute 変数設定メソッド3
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_Vector^>^ array)
| シェーダー内 attribute 変数設定メソッド4
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_TexCoord^>^ array)
| シェーダー内 attribute 変数設定メソッド5
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_HVector^>^ array)
| シェーダー内 attribute 変数設定メソッド6
基底クラス FK_CLI::fk_Attribute に属する継承公開メンバ関数
bool | SetAttrII (int key, int value)
| キーが int 型、値が int 型である属性設定メソッド
bool | SetAttrID (int key, double value)
| キーが int 型、値が double 型である属性設定メソッド
bool | SetAttrIS (int key, String^ value)
| キーが int 型、値が String 型である属性設定メソッド
bool | SetAttrSI (String^ key, int value)
| キーが String 型、値が int 型である属性設定メソッド
bool | SetAttrSD (String^ key, double value)
| キーが String 型、値が double 型である属性設定メソッド
bool | SetAttrSS (String ^ key, String^ value)
| キーが String 型、値が String 型である属性設定メソッド
int | GetAttrII (int key)
| キーが int 型、値が int 型である属性参照メソッド
double | GetAttrID (int key)
| キーが int 型、値が double 型である属性参照メソッド
String ^ | GetAttrIS (int key)
| キーが int 型、値が String 型である属性参照メソッド
int | GetAttrSI (String^ key)
| キーが String 型、値が int 型である属性参照メソッド
double | GetAttrSD (String^ key)
| キーが String 型、値が double 型である属性参照メソッド
String ^ | GetAttrSS (String^ key)
| キーが String 型、値が String 型である属性参照メソッド
bool | ExistAttrII (int key)
| キーが int 型、値が int 型である属性存在参照メソッド
bool | ExistAttrID (int key)
| キーが int 型、値が double 型である属性存在参照メソッド
bool | ExistAttrIS (int key)
| キーが int 型、値が String 型である属性存在参照メソッド
bool | ExistAttrSI (String^ key)
| キーが String 型、値が int 型である属性存在参照メソッド
bool | ExistAttrSD (String^ key)
| キーが String 型、値が double 型である属性存在参照メソッド
bool | ExistAttrSS (String^ key)
| キーが String 型、値が String 型である属性存在参照メソッド
bool | DeleteAttrII (int key)
| キーが int 型、値が int 型である属性消去メソッド
bool | DeleteAttrID (int key)
| キーが int 型、値が double 型である属性消去メソッド
bool | DeleteAttrIS (int key)
| キーが int 型、値が String 型である属性消去メソッド
bool | DeleteAttrSI (String^ key)
| キーが String 型、値が int 型である属性消去メソッド
bool | DeleteAttrSD (String^ key)
| キーが String 型、値が double 型である属性消去メソッド
bool | DeleteAttrSS (String^ key)
| キーが String 型、値が String 型である属性消去メソッド

## プロパティ

unsigned int | NodeSize`[get]`
| ノード数取得プロパティ
unsigned int | MaxEdgeID`[get]`
| 辺ID最大値取得プロパティ
基底クラス FK_CLI::fk_Shape に属する継承プロパティ
fk_RealShapeType^ | RealShapeType`[get]`
| 形状データ構造プロパティ

## 詳解

グラフ構造を制御するクラス

このクラスは、グラフ構造を制御する機能を提供します。 グラフ構造には多くの応用用途がありますが、 本クラスではその中でも経路探索を念頭に置いた機能を多く提供しています。

グラフ構造は、「ノード」と「辺」の2種類の要素によって構成されます。 ノードは任意の位置を持つ頂点集合であり、 辺は任意の2点を接続する線分です。 辺は無向線分としても有向線分としても考えることができ、 経路としてとらえると無向線分は両通行経路、有向線分は一方通行経路となります。

ノードを表すクラスは fk_GraphNode, 辺を表すクラスは fk_GraphEdge であり、 これらのクラスの機能も合わせて利用します。

fk_Graph のノードと辺は、「コスト」を格納することができます。 グラフ内の全要素のコストをまとめて「コストテーブル」と呼びます。 コストテーブルは、経路探索アルゴリズムで重要なデータであり、 fk_Graph はコストを扱うために有用な機能を多く提供しています。

コストテーブルは、int 型と double 型のいずれかを選択でき、 かつ両方の型それぞれで複数のコストテーブルを格納することができます。 各コストテーブルは ID により管理します。

参照
  fk_GraphNode, fk_GraphEdge

## 構築子と解体子

## ◆ fk_Graph()

FK_CLI::fk_Graph::fk_Graph | ( | unsigned int | num | ) |

コンストラクタ

初期値として、ノード数を設定します。 fk_Graph ではノード数は固定であるため、 利用する際に十分な数のノードを確保しておく必要があります。

引数

  [in] | num | ノード数

## ◆ ~fk_Graph()

FK_CLI::fk_Graph::~fk_Graph | ( |  | ) |

デストラクタ

## ◆ !fk_Graph()

FK_CLI::fk_Graph::!fk_Graph | ( |  | ) |

ファイナライザ

## 関数詳解

## ◆ GetNode()

fk_GraphNode ^ FK_CLI::fk_Graph::GetNode | ( | unsigned int | ID | ) |

ノード取得メソッド

ノードを表すインスタンスを ID より取得します。

引数

  [in] | ID | ノード ID

戻り値
  ノード

## ◆ GetAllNode()

List< fk_GraphNode ^> ^ FK_CLI::fk_Graph::GetAllNode | ( | void |  | ) |

全ノード取得メソッド

全てのノードインスタンスを取得します。

戻り値
  全ノード

## ◆ GetEdge()

fk_GraphEdge ^ FK_CLI::fk_Graph::GetEdge | ( | unsigned int | ID | ) |

辺情報取得メソッド

辺を表すインスタンスを ID より取得します。

引数

  [in] | ID | 辺 ID

戻り値
  辺情報

## ◆ GetAllEdge()

List< fk_GraphEdge ^> ^ FK_CLI::fk_Graph::GetAllEdge | ( | void |  | ) |

全辺取得メソッド

全ての辺インスタンスを取得します。

戻り値
  全辺情報

## ◆ IsConnect()

bool FK_CLI::fk_Graph::IsConnect | ( | fk_GraphNode^ | v1,
|  | fk_GraphNode^ | v2 )

辺存在確認メソッド

2つのノードの間に辺が存在するかどうかを判定します。 なお、ノード間の辺は複数存在する場合もあり、2本以上存在する場合も true を返します。

引数

  [in] | v1 | 辺の頂点となるノード。
  [in] | v2 | 辺の頂点となるノード。

戻り値
  辺が存在する場合 true を、存在しない場合 false を返します。

## ◆ MakeEdge()

fk_GraphEdge ^ FK_CLI::fk_Graph::MakeEdge | ( | bool | mode,
|  | fk_GraphNode^ | v1,
|  | fk_GraphNode^ | v2 )

辺生成メソッド

2点のノード間に辺を作成します。 なお、既に2点間に辺が存在する場合でも、エラーとならずに新たに辺を追加生成します。

引数

  [in] | mode | true の場合無向、false の場合有向となります。 辺が経路を表す場合は、有向辺は一方通行を表します。
  [in] | v1 | 辺の始点となるノード。
  [in] | v2 | 辺の終点となるノード。

戻り値
  接続した辺のインスタンスを返します。 作成に失敗した場合は nullptr を返します。

## ◆ DeleteEdge()

bool FK_CLI::fk_Graph::DeleteEdge | ( | fk_GraphEdge^ | e | ) |

辺削除メソッド

辺を削除します。

引数

  [in] | e | 削除する辺のインスタンス

戻り値
  削除に成功した場合 true を、失敗した場合 false を返します。

## ◆ MakeCostTable()

bool FK_CLI::fk_Graph::MakeCostTable | ( | unsigned int | tableID,
|  | fk_CostType | type )

コストテーブル生成メソッド

コストテーブルを作成します。 指定した ID で既に作成済であった場合は false を返し、初期化は行いません。

引数

  [in] | tableID | コストテーブル ID

  [in]

  type

  コスト値のタイプを設定します。
  - fk_CostType.INT
    コストが int 型となります。
  - fk_CostType.DOUBLE
    コストが double 型となります。
  - fk_CostType.LENGTH
    コストは辺の長さとなり、 内部では double 型として扱われます。

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

## ◆ SetCostDirection()

bool FK_CLI::fk_Graph::SetCostDirection | ( | unsigned int | tableID,
|  | fk_CostDirection | direction )

コスト算出方向指定関数

コストの算出方向を指定します。

引数

  [in] | tableID | コストテーブルID
  [in] | direction | コストを出発ノード側から算出する場合は fk_CostDirection.FORWARD を指定します。 コストを目標ノード側から算出する場合は fk_CostDirection.BACK を指定します。

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

## ◆ SetEdgeCostID()

bool FK_CLI::fk_Graph::SetEdgeCostID | ( | unsigned int | tableID,
|  | unsigned int | edgeCostID )

辺コストID対応指定メソッド

コストテーブルに対し、コスト値算出に利用する辺のコストIDを指定します。

引数

  [in] | tableID | コストテーブルID
  [in] | edgeCostID | 利用する辺のコスト値 ID を指定します。 MakeCostTable() の第2引数に fk_CostType.LENGTH を指定していた場合、 この値は無視されます。

## ◆ GetNodeCostID()

unsigned int FK_CLI::fk_Graph::GetNodeCostID | ( | unsigned int | tableID | ) |

ノード内コストID参照メソッド

コストテーブルに対応するノード内コストIDを参照します。

引数

  [in] | tableID | コストテーブルID

戻り値
  ノード内コストID

## ◆ SetStart()

void FK_CLI::fk_Graph::SetStart | ( | unsigned int | tableID,
|  | fk_GraphNode^ | node )

出発ノード設定メソッド

出発ノードを指定します。 既に別の出発ノードが設定されていた場合は、新たに設定したノードに更新されます。

引数

  [in] | tableID | コストテーブルID
  [in] | node | ノードインスタンス

## ◆ AddGoal()

void FK_CLI::fk_Graph::AddGoal | ( | unsigned int | tableID,
|  | fk_GraphNode^ | node )

目標ノード追加メソッド

目標ノードを追加します。 目標ノードは一つのコストテーブルに対し複数設定することができます。

引数

  [in] | tableID | コストテーブルID
  [in] | node | 目標ノードインスタンス

## ◆ RemoveGoal()

void FK_CLI::fk_Graph::RemoveGoal | ( | unsigned int | tableID,
|  | fk_GraphNode^ | node )

目標ノード除外メソッド

対象ノードを、目標ノードから除外します。

引数

  [in] | tableID | コストテーブルID
  [in] | node | 目標ノードインスタンス

## ◆ ClearGoal()

void FK_CLI::fk_Graph::ClearGoal | ( | unsigned int | tableID | ) |

目標ノード初期化メソッド

現時点で登録されている目標ノードを全て除外します。

引数

  [in] | tableID | コストテーブルID

## ◆ InitCostTable()

bool FK_CLI::fk_Graph::InitCostTable | ( | unsigned int | tableID | ) |

コストテーブル初期化メソッド

コストテーブルを初期化します。

引数

  [in] | tableID | コストテーブルID

戻り値
  初期化に成功したら true を、失敗したら false を返します。 SetCostMode() による設定が行われていないコストテーブルだった場合は false を返します。

## ◆ UpdateCostTable()

fk_CostStatus FK_CLI::fk_Graph::UpdateCostTable | ( | unsigned int | tableID | ) |

コストテーブル更新メソッド

各ノードに対し、コスト算出を一段階進めます。 全てのノードのコスト値を完全にするには、 fk_CostStatus.FINISH が返されるまで繰り返し本関数を呼び出す必要があります。

引数

  [in] | tableID | コストテーブルID

戻り値
  現在のコスト算出状況を返します。
  - fk_CostStatus.CONTINUE
    コスト算出がまだ途中段階であることを意味します。
  - fk_CostStatus.FINISH
    コスト算出が完了したことを意味します。
  - fk_CostStatus.ERROR
    グラフ内のコスト算出に関する情報が不完全であることを意味します。

## ◆ GetCostStatus()

fk_CostStatus FK_CLI::fk_Graph::GetCostStatus | ( | unsigned int | tableID | ) |

コストテーブル状態取得メソッド

現在のコストテーブルにおける更新情報を取得します。 UpdateCostTable() では実際にコストテーブルの更新処理を行いますが、 本関数は更新処理は行わず状態のみを取得します。

引数

  [in] | tableID | コストテーブルID

戻り値
  現在のコスト算出状況を返します。
  - fk_CostStatus.CONTINUE
    コスト算出がまだ途中段階であることを意味します。
  - fk_CostStatus.FINISH
    コスト算出が完了したことを意味します。
  - fk_CostStatus.ERROR
    グラフ内のコスト算出に関する情報が不完全であることを意味します。

## ◆ GetOnePath()

List< fk_GraphNode^> ^ FK_CLI::fk_Graph::GetOnePath | ( | unsigned int | tableID | ) |

最短経路取得メソッド

コストテーブルに基づいた、出発ノードから目標ノードまでの最短経路を取得します。 本関数を用いる際には、事前にコストテーブルの更新が完了し、 GetCostStatus() による結果が fk_CostStatus.FINISH となる状況でなければなりません。

最短経路が複数存在するような場合、任意の1種類のみを取得します。 現状では全ての最短経路を取得する機能は提供していません。

目標ノードが複数ある場合、そのうち出発ノードからもっとも経路が短いものが抽出されます。

引数

  [in] | tableID | 経路探索に用いる コストテーブルの ID

戻り値
  最短経路の経由地となるノードを経路順に格納したリストを返します。

## プロパティ詳解

## ◆ NodeSize

unsigned int FK_CLI::fk_Graph::NodeSize

get

ノード数取得プロパティ

グラフ内に存在するノード数を取得します。

## ◆ MaxEdgeID

unsigned int FK_CLI::fk_Graph::MaxEdgeID

get

辺ID最大値取得プロパティ

現在存在する辺の ID の最大値を取得します。

戻り値
  最大ID