列挙型 | |
enum | f_cg_pnt_pos { F_CG_INNER_PNT = 1, F_CG_NOT_INNER_PNT = 2, F_CG_OUTER_PNT = 3, F_CG_BOUNDARY_PNT = 4 } |
点の位置 [詳細] | |
関数 | |
INT FVALGAPI | fnFIE_cg_convex_polygon_check (const PNT_T *vrtx, INT num, INT *convex_type) |
多角形の凸性のチェック(整数型) | |
INT FVALGAPI | fnFIE_cg_convex_polygon_check_d (const DPNT_T *vrtx, INT num, INT *convex_type) |
多角形の凸性のチェック(浮動小数点型) | |
INT FVALGAPI | fnFIE_cg_simple_polygon_check (const PNT_T *vrtx, INT num, INT *simple_type) |
多角形の単純性のチェック(整数型) | |
INT FVALGAPI | fnFIE_cg_simple_polygon_check_d (const DPNT_T *vrtx, INT num, INT *simple_type) |
多角形の単純性のチェック(浮動小数点型) | |
INT FVALGAPI | fnFIE_cg_polygon_area_calc (const PNT_T *vrtx, INT num, INT *area2) |
単純多角形の符号付面積(整数型) | |
INT FVALGAPI | fnFIE_cg_polygon_area_calc_d (const DPNT_T *vrtx, INT num, DOUBLE *area) |
単純多角形の符号付面積(浮動小数点型) | |
INT FVALGAPI | fnFIE_cg_convex_polygon_diameter (const PNT_T *vrtx, INT num, INT *ans_pnt1, INT *ans_pnt2, INT *diameter) |
凸多角形に関する最遠点対問題(整数型) | |
INT FVALGAPI | fnFIE_cg_convex_polygon_diameter_d (const DPNT_T *vrtx, INT num, INT *ans_pnt1, INT *ans_pnt2, DOUBLE *diameter) |
凸多角形に関する最遠点対問題(浮動小数点型) | |
INT FVALGAPI | fnFIE_cg_pos_point_to_convex_polygon (PNT_T pnt, const PNT_T *vrtx, INT num, enum f_cg_pnt_pos *pos) |
点の凸多角形に対する位置判定 | |
INT FVALGAPI | fnFIE_cg_pos_point_to_simple_polygon (PNT_T pnt, const PNT_T *vrtx, INT num, enum f_cg_pnt_pos *pos) |
点の単純多角形に対する位置判定 | |
INT FVALGAPI | fnFIE_cg_points_in_convex_polygon (const PNT_T *vrtx, INT vrtx_num, const PNT_T *pnts, INT pnt_num, INT bndry_flag, INT **ans_pnt_no, INT *ans_pnt_num) |
凸多角形内部点列挙の実行 | |
INT FVALGAPI | fnFIE_cg_points_in_simple_polygon (const PNT_T *vrtx, INT vrtx_num, const PNT_T *pnts, INT pnt_num, INT bndry_flag, INT **ans_pnt_no, INT *ans_pnt_num) |
単純多角形内部点列挙の実行 |
enum f_cg_pnt_pos |
INT FVALGAPI fnFIE_cg_convex_polygon_check | ( | const PNT_T * | vrtx, | |
INT | num, | |||
INT * | convex_type | |||
) |
多角形の凸性のチェック(整数型)
与えられた多角形が凸多角形であるかどうかを三角形の符号付面積を用いて判定します。 頂点はどちら周りで与えられていても構いません。 頂点数 num には3以上の値としてください。
入力する多角形の頂点は整数型となります。 入力する多角形の頂点が浮動小数点型の場合は、 fnFIE_cg_convex_polygon_check_d() を使用してください。
[in] | vrtx | 多角形の頂点 |
[in] | num | 頂点数( vrtx の要素数) |
[out] | convex_type | 多角形の凸形状
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_convex_polygon_check_d | ( | const DPNT_T * | vrtx, | |
INT | num, | |||
INT * | convex_type | |||
) |
多角形の凸性のチェック(浮動小数点型)
与えられた多角形が凸多角形であるかどうかを三角形の符号付面積を用いて判定します。 頂点はどちら周りで与えられていても構いません。 頂点数 num は3以上の値としてください。
入力する多角形の頂点は浮動小数点型となります。 入力する多角形の頂点が整数型の場合は、 fnFIE_cg_convex_polygon_check() を使用してください。
[in] | vrtx | 多角形の頂点 |
[in] | num | 頂点数( vrtx の要素数) |
[out] | convex_type | 多角形の凸形状
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_simple_polygon_check | ( | const PNT_T * | vrtx, | |
INT | num, | |||
INT * | simple_type | |||
) |
多角形の単純性のチェック(整数型)
与えられた多角形が単純多角形であるかどうかを線分の交差判定を用いて判定します。 頂点はどちら周りで与えられていても構いません。
入力する多角形の頂点は整数型となります。 入力する多角形の頂点が浮動小数点型の場合は、 fnFIE_cg_simple_polygon_check_d() を使用してください。
頂点数 num は3以上の値としてください。
[in] | vrtx | 多角形の頂点 |
[in] | num | 頂点数( vrtx の要素数) |
[out] | simple_type | 多角形の凸形状
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_simple_polygon_check_d | ( | const DPNT_T * | vrtx, | |
INT | num, | |||
INT * | simple_type | |||
) |
多角形の単純性のチェック(浮動小数点型)
与えられた多角形が単純多角形であるかどうかを線分の交差判定を用いて判定します。 頂点はどちら周りで与えられていても構いません。
入力する多角形の頂点は浮動小数点型となります。 入力する多角形の頂点が整数型の場合は、 fnFIE_cg_simple_polygon_check() を使用してください。
頂点数 num は3以上の値としてください。
[in] | vrtx | 多角形の頂点 |
[in] | num | 頂点数( vrtx の要素数) |
[out] | simple_type | 多角形の凸形状
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_polygon_area_calc | ( | const PNT_T * | vrtx, | |
INT | num, | |||
INT * | area2 | |||
) |
単純多角形の符号付面積(整数型)
与えられた単純多角形(座標は整数)の符号付面積を求めます。 面積の符号は多角形の頂点列が
入力する多角形の頂点は整数型となります。 入力する多角形の頂点が浮動小数点型の場合は、 fnFIE_cg_polygon_area_calc_d() を使用してください。
面積は2倍値であるので注意してください(公式から精度が 0.5 単位であることが保証されている)。
頂点数 num は3以上の値としてください。
[in] | vrtx | 多角形の頂点 |
[in] | num | 頂点数( vrtx の要素数) |
[out] | area2 | 単純多角形の符号付き面積の2倍値を返す |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_CALC_IMPOSSIBLE | 頂点列が単純多角形ではないため、計算不能(頂点数が3以上の場合) | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_polygon_area_calc_d | ( | const DPNT_T * | vrtx, | |
INT | num, | |||
DOUBLE * | area | |||
) |
単純多角形の符号付面積(浮動小数点型)
与えられた単純多角形の符号付面積を求めます。 面積の符号は多角形の頂点列が
入力する多角形の頂点は浮動小数点型となります。 入力する多角形の頂点が整数型の場合は、 fnFIE_cg_polygon_area_calc() を使用してください。
頂点数 num は3以上の値としてください。
[in] | vrtx | 多角形の頂点 |
[in] | num | 頂点数( vrtx の要素数) |
[out] | area | 単純多角形の符号付き面積を返す |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_CALC_IMPOSSIBLE | 頂点列が単純多角形ではないため、計算不能(頂点数が3以上の場合) | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_convex_polygon_diameter | ( | const PNT_T * | vrtx, | |
INT | num, | |||
INT * | ans_pnt1, | |||
INT * | ans_pnt2, | |||
INT * | diameter | |||
) |
凸多角形に関する最遠点対問題(整数型)
与えられた凸多角形の頂点列で、最も離れている2点の番号とその距離の2乗を計算します。 アルゴリズムは「キャリパー法」と呼ばれるものです。
入力される凸多角形の頂点列の並びは時計回りあるいは反時計回りのいずれでも構いません。 任意の点集合の最遠点対問題は凸包を求めた後、このライブラリを使用することで、効率よく求めることができます。 ただし、すべての点が円周上にある場合などの特殊な場合や、 点の数がさほど多くない場合には単純な方法で処理する方が高速となります。
最遠点の2点は、 vrtx[ *ans_pnt1 ] と vrtx[ *ans_pnt2 ] となります。
なお、頂点数 num は1以上の値としてください。
もし、num = 1 であれば、*ans_pnt1 = *ans_pnt2 = 0 すなわち入力点が回答点となり、*diameter = 0 となります。
また、num = 2 でこれらが同一点の場合は、*ans_pnt1 = *ans_pnt2 = 0 および *diameter = 0 となります。
さらに、num >= 3 のときに頂点列のなかに同一点が含まれている場合、この頂点列は凸多角形ではないとして F_ERR_CALC_IMPOSSIBLE を返します。
入力する多角形の頂点は整数型となります。 入力する多角形の頂点が浮動小数点型の場合は、 fnFIE_cg_convex_polygon_diameter_d() を使用してください。
[in] | vrtx | 凸多角形の頂点列 |
[in] | num | 頂点数 |
[out] | ans_pnt1 | 回答点の番号1( vrtx の配列番号) |
[out] | ans_pnt2 | 回答点の番号2( vrtx の配列番号) |
[out] | diameter | 最も離れている2点の距離(集合の直径)の2乗 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータを渡した | |
F_ERR_CALC_IMPOSSIBLE | 頂点列が凸多角形ではないため、計算不能(頂点数が3以上の場合) | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_convex_polygon_diameter_d | ( | const DPNT_T * | vrtx, | |
INT | num, | |||
INT * | ans_pnt1, | |||
INT * | ans_pnt2, | |||
DOUBLE * | diameter | |||
) |
凸多角形に関する最遠点対問題(浮動小数点型)
与えられた凸多角形の頂点列で、最も離れている2点の番号とその距離の2乗を計算します。 アルゴリズムは「キャリパー法」と呼ばれるものです。
入力される凸多角形の頂点列の並びは時計回りあるいは反時計回りのいずれでも構いません。 任意の点集合の最遠点対問題は凸包を求めた後、このライブラリを使用することで、効率よく求めることができます。 ただし、すべての点が円周上にある場合などの特殊な場合や、 点の数がさほど多くない場合には単純な方法で処理する方が高速となります。
最遠点の2点は、 vrtx[ *ans_pnt1 ] と vrtx[ *ans_pnt2 ] となります。
なお、頂点数 num は1以上の値としてください。
もし、num = 1 であれば、*ans_pnt1 = *ans_pnt2 = 0 すなわち入力点が回答点となり、*diameter = 0 となります。
また、num = 2 でこれらが同一点の場合は、*ans_pnt1 = *ans_pnt2 = 0 および *diameter = 0 となります。
さらに、num >= 3 のときに頂点列のなかに同一点が含まれている場合、この頂点列は凸多角形ではないとして F_ERR_CALC_IMPOSSIBLE を返します。
入力する多角形の頂点は浮動小数点型となります。 入力する多角形の頂点が整数型の場合は、 fnFIE_cg_convex_polygon_diameter() を使用してください。
[in] | vrtx | 凸多角形の頂点列 |
[in] | num | 頂点数 |
[out] | ans_pnt1 | 回答点の番号1( vrtx の配列番号) |
[out] | ans_pnt2 | 回答点の番号2( vrtx の配列番号) |
[out] | diameter | 最も離れている2点の距離(集合の直径)の2乗 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータを渡した | |
F_ERR_CALC_IMPOSSIBLE | 頂点列が凸多角形ではないため、計算不能(頂点数が3以上の場合) | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_pos_point_to_convex_polygon | ( | PNT_T | pnt, | |
const PNT_T * | vrtx, | |||
INT | num, | |||
enum f_cg_pnt_pos * | pos | |||
) |
点の凸多角形に対する位置判定
点が凸多角形に対してどの位置にあるかを、三角形の符号付面積を用いることにより求めます。 頂点はどちら周りで与えられていても構いません。 なお、頂点数 num は3以上の値としてください。
[in] | pnt | 位置判定したい点 |
[in] | vrtx | 凸多角形の頂点列 |
[in] | num | 多角形の頂点数( vetx の要素数) |
[out] | pos | 凸多角形に対する点の位置
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された(頂点数が3未満) | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_CALC_IMPOSSIBLE | 頂点列が凸多角形ではないため、計算不能(頂点数が3以上の場合) | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_pos_point_to_simple_polygon | ( | PNT_T | pnt, | |
const PNT_T * | vrtx, | |||
INT | num, | |||
enum f_cg_pnt_pos * | pos | |||
) |
点の単純多角形に対する位置判定
点が単純多角形に対してどの位置にあるかを、その点を終点とする水平線分と辺の交差判定 を用いることにより求めます。 頂点はどちら周りで与えられていても構いません。 なお、頂点数 num は3以上の値としてください。
[in] | pnt | 位置判定したい点 |
[in] | vrtx | 単純多角形の頂点列 |
[in] | num | 多角形の頂点数( vetx の要素数) |
[out] | pos | 凸多角形に対する点の位置
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された(頂点数が3未満) | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_CALC_IMPOSSIBLE | 計算不能
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_points_in_convex_polygon | ( | const PNT_T * | vrtx, | |
INT | vrtx_num, | |||
const PNT_T * | pnts, | |||
INT | pnt_num, | |||
INT | bndry_flag, | |||
INT ** | ans_pnt_no, | |||
INT * | ans_pnt_num | |||
) |
凸多角形内部点列挙の実行
点集合に対し、凸多角形の内部に含まれるものを列挙します。 多角形に対して前処理を行なうことによって、 fnFIE_cg_pos_point_to_convex_polygon() を繰返しを用いるよりも高速に処理出来ることを想定しています。 具体的には、点の含まれる可能性のある各領域を二分探索法によって求める、というものです。
回答としては内部にある点の番号表を与えます。 境界(多角形の辺)上にある点を回答に含めるかどうかの選択が可能です。
なお各パラメータは、以下の条件を満たす必要があります。
[in] | vrtx | 凸多角形の頂点列 |
[in] | vrtx_num | 多角形の頂点数( vrtx の要素数) |
[in] | pnts | 内部点を判定する点集合 このデータは順序データで有る必要はなく、また重複点が合ってもかまわない |
[in] | pnt_num | 点集合の点の数( pnts の要素数) |
[in] | bndry_flag | 境界フラグ
|
[out] | ans_pnt_no | 内部にある点の番号列の先頭ポインタ。 ここでの番号とは、配列 pnts での要素番号を指す |
[out] | ans_pnt_num | 内部点の数 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_CALC_IMPOSSIBLE | 計算不能
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_cg_points_in_simple_polygon | ( | const PNT_T * | vrtx, | |
INT | vrtx_num, | |||
const PNT_T * | pnts, | |||
INT | pnt_num, | |||
INT | bndry_flag, | |||
INT ** | ans_pnt_no, | |||
INT * | ans_pnt_num | |||
) |
単純多角形内部点列挙の実行
点集合に対し、単純多角形の内部に含まれるものを列挙します。 多角形に対して前処理を行なうことによって、 fnFIE_cg_pos_point_to_simple_polygon() を繰返し用いるよりも高速に処理出来ることを想定しています。 具体的には、多角形の存在領域を分割して交差を調べる辺の数を減らす、というものです。
回答としては内部にある点の番号表を与えます。 境界(多角形の辺)上にある点を回答に含めるかどうかの選択が可能です。
なお各パラメータは、以下の条件を満たす必要があります。
[in] | vrtx | 凸多角形の頂点列 |
[in] | vrtx_num | 多角形の頂点数( vrtx の要素数) |
[in] | pnts | 内部点を判定する点集合 このデータは順序データで有る必要はなく、また重複点が合ってもかまわない |
[in] | pnt_num | 点集合の点の数( pnts の要素数) |
[in] | bndry_flag | 境界フラグ
|
[out] | ans_pnt_no | 内部にある点の番号列の先頭ポインタ。 ここでの番号とは、配列 pnts での要素番号を指す |
[out] | ans_pnt_num | 内部点の数 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_CALC_IMPOSSIBLE | 頂点列が単純多角形ではないため、計算不能(頂点数が3以上の場合) | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |