点群間の極座標変換

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

Syntax

C#
public static int fnFIE_polar_trans_pnt(
	DPNT_T_PTR psrc,
	DPNT_T_PTR pdst,
	int num_pnt,
	DPNT_T origin_in,
	double width,
	double height,
	DPNT_T origin_out,
	double radius,
	double start_angle,
	double range_angle,
	f_coord_mode coord_mode
)
Visual Basic
Public Shared Function fnFIE_polar_trans_pnt ( 
	psrc As DPNT_T_PTR,
	pdst As DPNT_T_PTR,
	num_pnt As Integer,
	origin_in As DPNT_T,
	width As Double,
	height As Double,
	origin_out As DPNT_T,
	radius As Double,
	start_angle As Double,
	range_angle As Double,
	coord_mode As f_coord_mode
) As Integer

Parameters

psrc
Type: fvalgcli..::..DPNT_T_PTR
入力座標群配列の先頭ポインタ
pdst
Type: fvalgcli..::..DPNT_T_PTR
出力座標群配列の先頭ポインタ
num_pnt
Type: System..::..Int32
座標数
origin_in
Type: fvalgcli..::..DPNT_T
入力側での処理対象領域の開始座標
width
Type: System..::..Double
入力側での処理対象領域の幅
height
Type: System..::..Double
入力側での処理対象領域の高さ
origin_out
Type: fvalgcli..::..DPNT_T
出力側での円板の回転中心
radius
Type: System..::..Double
出力側での円板の半径
start_angle
Type: System..::..Double
出力側での処理開始角度
range_angle
Type: System..::..Double
出力側での角度の処理範囲
coord_mode
Type: fvalgcli..::..f_coord_mode
入力側での回転中心位置
  • F_PT_UPPER :処理対象領域の右上座標
  • F_PT_LOWER :処理対象領域の左下座標
  • F_PT_LEFT :処理対象領域の左上座標
  • F_PT_RIGHT :処理対象領域の右下座標

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_INVALID_IMAGE画像オブジェクトの異常
F_ERR_INVALID_PARAMパラメータ異常
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Examples

C# Copy imageCopy
//    $Revision: 1.1 $
// #define PNT_DUMP

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

namespace TC
{
    public partial class FIE
    {
        /// <summary>
        /// 点群間の極座標変換.
        /// </summary>
        [FvPluginExecute]
        public void fnFIE_polar_trans_pnt()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE save_img = FHANDLE.Zero;    // 出力画像.
            DPNT_T_PTR psrc = DPNT_T_PTR.Zero;    // 入力座標群配列の先頭ポインタ.
            DPNT_T_PTR pdst = DPNT_T_PTR.Zero;    // 出力座標群配列の先頭ポインタ.
            DOUBLE_PTR val = IntPtr.Zero;
            int num_pnt;                        // 座標数.
            DPNT_T origin_in;                    // 入力側での処理対象領域の開始座標.
            double width;                        // 入力側での処理対象領域の幅.
            double height;                        // 入力側での処理対象領域の高さ.
            DPNT_T origin_out;                    // 出力側での円板の回転中心.
            double radius;                        // 出力側での円板の半径.
            double start_angle;                    // 出力側での処理開始角度.
            double range_angle;                    // 出力側での角度の処理範囲.
            f_coord_mode coord_mode;            // 入力側での回転中心位置.

            const int size = 128;

            try
            {
                // 入出力座標群配列の確保.
                num_pnt = size;
                psrc = DPNT_T_PTR.alloc(num_pnt);
                pdst = DPNT_T_PTR.alloc(num_pnt);

                // 入力座標群の設定.
                for (int i = 0; i < size; i++)
                {
                    double x = i;
                    double y = size / 2;
                    psrc[i] = DPNT_T.init(x, y);
                }

                // パラメータの設定.
                coord_mode = f_coord_mode.F_PT_UPPER;
                origin_in.x = size - 1;
                origin_in.y = 0;

                width = size;
                height = size;

                origin_out.x = (double)size / 2;
                origin_out.y = (double)size / 2;

                radius = (double)size / 2;
                start_angle = 0;
                range_angle = 2.0 * Math.PI;

                // 処理の実行.
                status = api.fnFIE_polar_trans_pnt(psrc, pdst, num_pnt,
                                                                    origin_in, width, height,
                                                                    origin_out, radius, start_angle, range_angle,
                                                                    coord_mode);

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

                // 出力座標群を描画した画像の保存.
                {
                    save_img = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_UC8, 1, size, size);
                    api.fnFIE_img_clear(save_img, 255);

                    val = DOUBLE_PTR.alloc(1);
                    val[0] = 0;

                    for (int i = 0; i < size; i++)
                    {
                        api.fnFIE_draw_point(save_img, val, pdst[i]);
                    }

                    api.fnFIE_save_png(ResultDir + "/fnFIE_polar_trans_pnt.png", save_img, -1);
                }

            }
            finally
            {
                // オブジェクトの開放.
                save_img.Dispose();
                psrc.Dispose();
                pdst.Dispose();
                val.Dispose();

            }
#if PNT_DUMP
            // fnFIE_polar_trans_pnt_inv の入力として使用する.
            ConsoleOut.WriteFunctionName(":\n");

            Console.Write("double [] psrc_x = {");
            for (int i = 0; i < size; i++)
            {
                if (i % 16 == 0) Console.Write("\n\t");
                Console.Write("{0}, ", pdst[i].x);
            }
            Console.WriteLine("};");

            Console.Write("double [] psrc_y = {");
            for (int i = 0; i < size; i++)
            {
                if (i % 16 == 0) Console.Write("\n\t");
                Console.Write("{0}, ", pdst[i].y);
            }
            Console.WriteLine("};");
#endif
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $
' #Const PNT_DUMP = True

Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Public Partial Class FIE
    ''' <summary>
    ''' 点群間の極座標変換.
    ''' </summary>
    <FvPluginExecute> _
    Public Sub fnFIE_polar_trans_pnt()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim save_img As FHANDLE = FHANDLE.Zero
        ' 出力画像.
        Dim psrc As DPNT_T_PTR = DPNT_T_PTR.Zero
        ' 入力座標群配列の先頭ポインタ.
        Dim pdst As DPNT_T_PTR = DPNT_T_PTR.Zero
        ' 出力座標群配列の先頭ポインタ.
        Dim val As DOUBLE_PTR = IntPtr.Zero
        Dim num_pnt As Integer
        ' 座標数.
        Dim origin_in As DPNT_T
        ' 入力側での処理対象領域の開始座標.
        Dim width As Double
        ' 入力側での処理対象領域の幅.
        Dim height As Double
        ' 入力側での処理対象領域の高さ.
        Dim origin_out As DPNT_T
        ' 出力側での円板の回転中心.
        Dim radius As Double
        ' 出力側での円板の半径.
        Dim start_angle As Double
        ' 出力側での処理開始角度.
        Dim range_angle As Double
        ' 出力側での角度の処理範囲.
        Dim coord_mode As f_coord_mode
        ' 入力側での回転中心位置.
        Const  size As Integer = 128

        Try
            ' 入出力座標群配列の確保.
            num_pnt = size
            psrc = DPNT_T_PTR.alloc(num_pnt)
            pdst = DPNT_T_PTR.alloc(num_pnt)

            ' 入力座標群の設定.
            For i As Integer = 0 To size - 1
                Dim x As Double = i
                Dim y As Double = size \ 2
                psrc(i) = DPNT_T.init(x, y)
            Next

            ' パラメータの設定.
            coord_mode = f_coord_mode.F_PT_UPPER
            origin_in.x = size - 1
            origin_in.y = 0

            width = size
            height = size

            origin_out.x = CDbl(size) / 2
            origin_out.y = CDbl(size) / 2

            radius = CDbl(size) / 2
            start_angle = 0
            range_angle = 2.0 * Math.PI

            ' 処理の実行.
            status = api.fnFIE_polar_trans_pnt(psrc, pdst, num_pnt, origin_in, width, height, _
                origin_out, radius, start_angle, range_angle, coord_mode)

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

            ' 出力座標群を描画した画像の保存.
            If True Then
                save_img = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_UC8), 1, size, size)
                api.fnFIE_img_clear(save_img, 255)

                val = DOUBLE_PTR.alloc(1)
                val(0) = 0

                For i As Integer = 0 To size - 1
                    api.fnFIE_draw_point(save_img, val, pdst(i))
                Next

                api.fnFIE_save_png(ResultDir & "/fnFIE_polar_trans_pnt.png", save_img, -1)

            End If
        Finally
            ' オブジェクトの開放.
            save_img.Dispose()
            psrc.Dispose()
            pdst.Dispose()

            val.Dispose()
        End Try
        #If PNT_DUMP Then
        ' fnFIE_polar_trans_pnt_inv の入力として使用する.
        ConsoleOut.WriteFunctionName(":" & vbLf)

        Console.Write("double [] psrc_x = {")
        For i As Integer = 0 To size - 1
            If i Mod 16 = 0 Then
                Console.Write(vbLf & vbTab)
            End If
            Console.Write("{0}, ", pdst(i).x)
        Next
        Console.WriteLine("};")

        Console.Write("double [] psrc_y = {")
        For i As Integer = 0 To size - 1
            If i Mod 16 = 0 Then
                Console.Write(vbLf & vbTab)
            End If
            Console.Write("{0}, ", pdst(i).y)
        Next
        Console.WriteLine("};")
        #End If
    End Sub
End Class

See Also