近傍にある点の数のカウント

Namespace: fvalgcli
Assembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)

Syntax

C#
public static int fnFIE_cg_near_points_count(
	PNT_T_PTR pnts,
	int num,
	int radius,
	INT_PTR ans_num_tbl
)
Visual Basic
Public Shared Function fnFIE_cg_near_points_count ( 
	pnts As PNT_T_PTR,
	num As Integer,
	radius As Integer,
	ans_num_tbl As INT_PTR
) As Integer

Parameters

pnts
Type: fvalgcli..::..PNT_T_PTR
入力点群
num
Type: System..::..Int32
入力点数( pnts の要素数)
radius
Type: System..::..Int32
近傍とみなす半径
ans_num_tbl
Type: fvalgcli..::..INT_PTR
全近傍点計数回答表( num だけ外部で、メモリ領域を確保している )

Return Value

Type: Int32
以下のエラーコードを返します。

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NOMEMORYメモリ不足
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Remarks

Examples

C# Copy imageCopy
//    $Revision: 1.1 $

using System;
using System.Collections.Generic;
using System.Text;

using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        [FvPluginExecute]
        public void fnFIE_cg_near_points_count()
        {
            int status = (int)f_err.F_ERR_NONE;

            PNT_T_PTR pnts = IntPtr.Zero;        // 入力点群.
            int num = 0;                        // 入力点数( pnts の要素数).
            int radius = 1;                        // 近傍とみなす半径.
            INT_PTR ans_num_tbl = IntPtr.Zero;    // 全近傍点計数回答表( num だけ外部で、メモリ領域を確保している ).

            try
            {
                const int x_size = 8;
                const int y_size = 3;

                // 入力点群を確保、設定する.
                num = x_size * y_size;

                pnts = PNT_T_PTR.alloc(num);
                for (int y = 0; y < y_size; y++)
                    for (int x = 0; x < x_size; x++)
                        pnts[y * x_size + x] = PNT_T.init(x, y);

                // 回答表を確保する.
                ans_num_tbl = INT_PTR.alloc(num);

                // 近傍にある点の数のカウント.
                status = api.fnFIE_cg_near_points_count(pnts, num, radius, ans_num_tbl);

                Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status);

                // 結果を出力する.
                ConsoleOut.WriteFunctionName("");

                bool check = true;

                for (int i = 0; i < num; i++)
                {
                    if (i % x_size == 0)
                    {
                        Console.Write("\n\t");
                    }

                    int ans_num = 4;
                    if (pnts[i].x <= 0 || pnts[i].x >= x_size - 1) ans_num--;
                    if (pnts[i].y <= 0 || pnts[i].y >= y_size - 1) ans_num--;

                    Console.Write("{0}, ", ans_num_tbl[i]);

                    if (ans_num_tbl[i] != ans_num) check = false;
                }

                Console.Write(" ...");
                ConsoleOut.IsTrue(check);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                pnts.Dispose();
                ans_num_tbl.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text

Imports fvalgcli

Public Partial Class FIE
    <FvPluginExecute> _
    Public Sub fnFIE_cg_near_points_count()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim pnts As PNT_T_PTR = IntPtr.Zero
        ' 入力点群.
        Dim num As Integer = 0
        ' 入力点数( pnts の要素数).
        Dim radius As Integer = 1
        ' 近傍とみなす半径.
        Dim ans_num_tbl As INT_PTR = IntPtr.Zero
        ' 全近傍点計数回答表( num だけ外部で、メモリ領域を確保している ).
        Try
            Const  x_size As Integer = 8
            Const  y_size As Integer = 3

            ' 入力点群を確保、設定する.
            num = x_size * y_size

            pnts = PNT_T_PTR.alloc(num)
            For y As Integer = 0 To y_size - 1
                For x As Integer = 0 To x_size - 1
                    pnts(y * x_size + x) = PNT_T.init(x, y)
                Next
            Next

            ' 回答表を確保する.
            ans_num_tbl = INT_PTR.alloc(num)

            ' 近傍にある点の数のカウント.
            status = api.fnFIE_cg_near_points_count(pnts, num, radius, ans_num_tbl)

            Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err))

            ' 結果を出力する.
            ConsoleOut.WriteFunctionName("")

            Dim check As Boolean = True

            For i As Integer = 0 To num - 1
                If i Mod x_size = 0 Then
                    Console.Write(vbLf & vbTab)
                End If

                Dim ans_num As Integer = 4
                If pnts(i).x <= 0 OrElse pnts(i).x >= x_size - 1 Then
                    ans_num -= 1
                End If
                If pnts(i).y <= 0 OrElse pnts(i).y >= y_size - 1 Then
                    ans_num -= 1
                End If

                Console.Write("{0}, ", ans_num_tbl(i))

                If ans_num_tbl(i) <> ans_num Then
                    check = False
                End If
            Next

            Console.Write(" ...")
            ConsoleOut.IsTrue(check)
        Catch ex As System.Exception
            Throw ex
        Finally
            pnts.Dispose()
            ans_num_tbl.Dispose()
        End Try
    End Sub
End Class

See Also