凸多角形内部点列挙の実行
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_cg_points_in_convex_polygon( PNT_T_PTR vrtx, int vrtx_num, PNT_T_PTR pnts, int pnt_num, int bndry_flag, ref INT_PTR ans_pnt_no, ref int ans_pnt_num ) |
Visual Basic |
---|
Public Shared Function fnFIE_cg_points_in_convex_polygon ( vrtx As PNT_T_PTR, vrtx_num As Integer, pnts As PNT_T_PTR, pnt_num As Integer, bndry_flag As Integer, ByRef ans_pnt_no As INT_PTR, ByRef ans_pnt_num As Integer ) As Integer |
Parameters
- vrtx
- Type: fvalgcli..::..PNT_T_PTR
凸多角形の頂点列
- vrtx_num
- Type: System..::..Int32
多角形の頂点数( vrtx の要素数)
- pnts
- Type: fvalgcli..::..PNT_T_PTR
内部点を判定する点集合 このデータは順序データで有る必要はなく、また重複点が合ってもかまわない
- pnt_num
- Type: System..::..Int32
点集合の点の数( pnts の要素数)
- bndry_flag
- Type: System..::..Int32
境界フラグ- ON 境界上の点を内部の点として回答に含める
- OFF 境界上の点は外部の点として、回答に含めない
- ans_pnt_no
- Type: fvalgcli..::..INT_PTR%
内部にある点の番号列の先頭ポインタ。 ここでの番号とは、配列 pnts での要素番号を指す。IntPtr.Zero で初期化してください。
- ans_pnt_num
- Type: System..::..Int32%
内部点の数
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された |
F_ERR_NOMEMORY | メモリ不足 |
F_ERR_CALC_IMPOSSIBLE | 頂点列が凸多角形ではないため、計算不能(頂点数が3以上の場合) |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Remarks
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ #define BNDRY_ON using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { [FvPluginExecute] public void fnFIE_cg_points_in_convex_polygon() { int status = (int)f_err.F_ERR_NONE; PNT_T_PTR vrtx = IntPtr.Zero; // [in] 凸多角形の頂点列. int vrtx_num = 0; // [in] 多角形の頂点数( vrtx の要素数). PNT_T_PTR pnts = IntPtr.Zero; // [in] 内部点を判定する点集合. int pnt_num = 0; // [in] 点集合の点の数( pnts の要素数). int bndry_flag = 0; // [in] 境界フラグ(境界上の点を内部の点として回答に ... 1:含める, 0:含めない). INT_PTR ans_pnt_no = INT_PTR.Zero; // [out] 内部にある点の番号(pnts での要素番号)列の先頭ポインタ. int ans_pnt_num = 0; // [out] 内部点の数. try { // 凸多角形の頂点列を確保、設定する. const int min = 5; const int max = 15; vrtx_num = 4; vrtx = PNT_T_PTR.alloc(vrtx_num); vrtx[0] = PNT_T.init(min, min); vrtx[1] = PNT_T.init(max, min); vrtx[2] = PNT_T.init(max, max); vrtx[3] = PNT_T.init(min, max); // 内部点を判定する点集合を確保、設定する. int out_index = 0; int in_index = out_index + 1; int bndry_index = in_index + 1; pnt_num = bndry_index + 1; pnts = PNT_T_PTR.alloc(pnt_num); pnts[out_index] = PNT_T.init(min - 1, min - 1); pnts[in_index] = PNT_T.init(min + 1, min + 1); pnts[bndry_index] = PNT_T.init(min, min); #if BNDRY_ON bndry_flag = 1; #else bndry_flag = 0; #endif // 凸多角形内部点列挙の実行. status = api.fnFIE_cg_points_in_convex_polygon (vrtx, vrtx_num, pnts, pnt_num, bndry_flag, ref ans_pnt_no, ref ans_pnt_num); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 結果を出力する. ConsoleOut.WriteFunctionName(":\t"); Console.Write("ans_pnt_num = {0}", ans_pnt_num); Console.Write("\n\tans_pnt_no = "); bool check = true; for (int i = 0; i < ans_pnt_num; i++) { int ans = ans_pnt_no[i]; Console.Write("[{0}]{1}({2}, {3}), ", i, ans, pnts[ans].x, pnts[ans].y); #if BNDRY_ON if (ans != in_index && ans != bndry_index) check = false; #else if (ans != in_index) check = false; #endif } Console.Write(" ..."); ConsoleOut.IsTrue(check); } catch (System.Exception ex) { throw ex; } finally { vrtx.Dispose(); pnts.Dispose(); ans_pnt_no.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ #Const BNDRY_ON = True Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE <FvPluginExecute> _ Public Sub fnFIE_cg_points_in_convex_polygon() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim vrtx As PNT_T_PTR = IntPtr.Zero ' [in] 凸多角形の頂点列. Dim vrtx_num As Integer = 0 ' [in] 多角形の頂点数( vrtx の要素数). Dim pnts As PNT_T_PTR = IntPtr.Zero ' [in] 内部点を判定する点集合. Dim pnt_num As Integer = 0 ' [in] 点集合の点の数( pnts の要素数). Dim bndry_flag As Integer = 0 ' [in] 境界フラグ(境界上の点を内部の点として回答に ... 1:含める, 0:含めない). Dim ans_pnt_no As INT_PTR = INT_PTR.Zero ' [out] 内部にある点の番号(pnts での要素番号)列の先頭ポインタ. Dim ans_pnt_num As Integer = 0 ' [out] 内部点の数. Try ' 凸多角形の頂点列を確保、設定する. Const min As Integer = 5 Const max As Integer = 15 vrtx_num = 4 vrtx = PNT_T_PTR.alloc(vrtx_num) vrtx(0) = PNT_T.init(min, min) vrtx(1) = PNT_T.init(max, min) vrtx(2) = PNT_T.init(max, max) vrtx(3) = PNT_T.init(min, max) ' 内部点を判定する点集合を確保、設定する. Dim out_index As Integer = 0 Dim in_index As Integer = out_index + 1 Dim bndry_index As Integer = in_index + 1 pnt_num = bndry_index + 1 pnts = PNT_T_PTR.alloc(pnt_num) pnts(out_index) = PNT_T.init(min - 1, min - 1) pnts(in_index) = PNT_T.init(min + 1, min + 1) pnts(bndry_index) = PNT_T.init(min, min) #If BNDRY_ON Then bndry_flag = 1 #Else bndry_flag = 0 #End If ' 凸多角形内部点列挙の実行. status = api.fnFIE_cg_points_in_convex_polygon(vrtx, vrtx_num, pnts, pnt_num, bndry_flag, ans_pnt_no, _ ans_pnt_num) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 結果を出力する. ConsoleOut.WriteFunctionName(":" & vbTab) Console.Write("ans_pnt_num = {0}", ans_pnt_num) Console.Write(vbLf & vbTab & "ans_pnt_no = ") Dim check As Boolean = True For i As Integer = 0 To ans_pnt_num - 1 Dim ans As Integer = ans_pnt_no(i) Console.Write("[{0}]{1}({2}, {3}), ", i, ans, pnts(ans).x, pnts(ans).y) #If BNDRY_ON Then If ans <> in_index AndAlso ans <> bndry_index Then check = False End If #Else If ans <> in_index Then check = False End If #End If Next Console.Write(" ...") ConsoleOut.IsTrue(check) Catch ex As System.Exception Throw ex Finally vrtx.Dispose() pnts.Dispose() ans_pnt_no.Dispose() End Try End Sub End Class |