複数点群を通る円の中心座標と半径の算出
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_cg_calc_circle_npoints( DPNT_T_PTR[] pnts_set, int[] num_set, int set_num, ref DPNT_T center, ref double radius ) |
Visual Basic |
---|
Public Shared Function fnFIE_cg_calc_circle_npoints ( pnts_set As DPNT_T_PTR(), num_set As Integer(), set_num As Integer, ByRef center As DPNT_T, ByRef radius As Double ) As Integer |
Parameters
- pnts_set
- Type: array<fvalgcli..::..DPNT_T_PTR>[]()[][]
複数の座標点群Gnの配列。 3個以上の要素が必要
- num_set
- Type: array<System..::..Int32>[]()[][]
各点群に入っている点の個数の配列。 set_num 個分の要素が必要
- set_num
- Type: System..::..Int32
点群数
- center
- Type: fvalgcli..::..DPNT_T%
円の中心座標Pc
- radius
- Type: System..::..Double%
円の半径r
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された |
F_ERR_CALC_IMPOSSIBLE | 計算不能エラー |
F_ERR_NOMEMORY | メモリ不足 |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Remarks
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using fvalgcli; namespace TC { public partial class FIE { [FvPluginExecute] public void fnFIE_cg_calc_circle_npoints() { int status = (int)f_err.F_ERR_NONE; DPNT_T_PTR pts0 = IntPtr.Zero; DPNT_T_PTR pts1 = IntPtr.Zero; DPNT_T_PTR pts2 = IntPtr.Zero; const int _PNTS_SET_NUM = 3; DPNT_T_PTR[] pnts_set = new DPNT_T_PTR[_PNTS_SET_NUM]; int[] num_set = new int[_PNTS_SET_NUM]; int set_num = _PNTS_SET_NUM; DPNT_T center = new DPNT_T(); double radius = new double(); const double ans_radius = 52.771415410562; try { pts0 = MakePoints(0); // G0:要素数5. pts1 = MakePoints(1); // G1:要素数6. pts2 = MakePoints(2); // G2:要素数8. // 複数の座標点群Gnの配列. pnts_set[0] = pts0; pnts_set[1] = pts1; pnts_set[2] = pts2; // 各点群に入っている点の個数の配列. num_set[0] = 5; num_set[1] = 6; num_set[2] = 8; status = api.fnFIE_cg_calc_circle_npoints(pnts_set, num_set, set_num, ref center, ref radius); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 結果を出力する. ConsoleOut.WriteFunctionName(":\n"); Console.WriteLine("center = ({0},{1}), radius = {2}", center.x, center.y, radius); Console.Write(" ..."); ConsoleOut.IsTrue(DblEqual(radius, ans_radius)); } catch (System.Exception ex) { throw ex; } finally { pts0.Dispose(); pts1.Dispose(); pts2.Dispose(); } } /// <summary> /// テスト用点群の生成 /// </summary> /// <param name="option">オプション</param> /// <returns>点群を返します。</returns> private DPNT_T_PTR MakePoints(int option) { DPNT_T_PTR result = DPNT_T_PTR.Zero; switch (option) { case 0: { result = DPNT_T_PTR.alloc(5); result[0] = DPNT_T.init(50,20); result[1] = DPNT_T.init(60,10); result[2] = DPNT_T.init(70,10); result[3] = DPNT_T.init(80,10); result[4] = DPNT_T.init(90,20); } break; case 1: { result = DPNT_T_PTR.alloc(6); result[0] = DPNT_T.init(100,60); result[1] = DPNT_T.init(110,70); result[2] = DPNT_T.init(120,80); result[3] = DPNT_T.init(130,90); result[4] = DPNT_T.init(140,100); result[5] = DPNT_T.init(150,110); } break; case 2: { result = DPNT_T_PTR.alloc(8); result[0] = DPNT_T.init(10,50); result[1] = DPNT_T.init(20,60); result[2] = DPNT_T.init(30,70); result[3] = DPNT_T.init(40,80); result[4] = DPNT_T.init(50,90); result[5] = DPNT_T.init(60,100); result[6] = DPNT_T.init(70,110); result[7] = DPNT_T.init(80, 120); } break; } return result; } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports System.Runtime.InteropServices Imports fvalgcli Public Partial Class FIE <FvPluginExecute> _ Public Sub fnFIE_cg_calc_circle_npoints() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim pts0 As DPNT_T_PTR = IntPtr.Zero Dim pts1 As DPNT_T_PTR = IntPtr.Zero Dim pts2 As DPNT_T_PTR = IntPtr.Zero Const _PNTS_SET_NUM As Integer = 3 Dim pnts_set As DPNT_T_PTR() = New DPNT_T_PTR(_PNTS_SET_NUM - 1) {} Dim num_set As Integer() = New Integer(_PNTS_SET_NUM - 1) {} Dim set_num As Integer = _PNTS_SET_NUM Dim center As New DPNT_T() Dim radius As New Double() Const ans_radius As Double = 52.771415410562 Try pts0 = MakePoints(0) ' G0:要素数5. pts1 = MakePoints(1) ' G1:要素数6. pts2 = MakePoints(2) ' G2:要素数8. ' 複数の座標点群Gnの配列. pnts_set(0) = pts0 pnts_set(1) = pts1 pnts_set(2) = pts2 ' 各点群に入っている点の個数の配列. num_set(0) = 5 num_set(1) = 6 num_set(2) = 8 status = api.fnFIE_cg_calc_circle_npoints(pnts_set, num_set, set_num, center, radius) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 結果を出力する. ConsoleOut.WriteFunctionName(":" & vbLf) Console.WriteLine("center = ({0},{1}), radius = {2}", center.x, center.y, radius) Console.Write(" ...") ConsoleOut.IsTrue(DblEqual(radius, ans_radius)) Catch ex As System.Exception Throw ex Finally pts0.Dispose() pts1.Dispose() pts2.Dispose() End Try End Sub ''' <summary> ''' テスト用点群の生成 ''' </summary> ''' <param name="option">オプション</param> ''' <returns>点群を返します。</returns> Private Function MakePoints([option] As Integer) As DPNT_T_PTR Dim result As DPNT_T_PTR = DPNT_T_PTR.Zero Select Case [option] Case 0 If True Then result = DPNT_T_PTR.alloc(5) result(0) = DPNT_T.init(50, 20) result(1) = DPNT_T.init(60, 10) result(2) = DPNT_T.init(70, 10) result(3) = DPNT_T.init(80, 10) result(4) = DPNT_T.init(90, 20) End If Exit Select Case 1 If True Then result = DPNT_T_PTR.alloc(6) result(0) = DPNT_T.init(100, 60) result(1) = DPNT_T.init(110, 70) result(2) = DPNT_T.init(120, 80) result(3) = DPNT_T.init(130, 90) result(4) = DPNT_T.init(140, 100) result(5) = DPNT_T.init(150, 110) End If Exit Select Case 2 If True Then result = DPNT_T_PTR.alloc(8) result(0) = DPNT_T.init(10, 50) result(1) = DPNT_T.init(20, 60) result(2) = DPNT_T.init(30, 70) result(3) = DPNT_T.init(40, 80) result(4) = DPNT_T.init(50, 90) result(5) = DPNT_T.init(60, 100) result(6) = DPNT_T.init(70, 110) result(7) = DPNT_T.init(80, 120) End If Exit Select End Select Return result End Function End Class |