点群間の逆極座標変換

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_inv(
	DPNT_T_PTR psrc,
	DPNT_T_PTR pdst,
	int num_pnt,
	DPNT_T origin_in,
	double radius,
	double start_angle,
	double range_angle,
	DPNT_T origin_out,
	double width,
	double height,
	f_coord_mode coord_mode
)
Visual Basic
Public Shared Function fnFIE_polar_trans_pnt_inv ( 
	psrc As DPNT_T_PTR,
	pdst As DPNT_T_PTR,
	num_pnt As Integer,
	origin_in As DPNT_T,
	radius As Double,
	start_angle As Double,
	range_angle As Double,
	origin_out As DPNT_T,
	width As Double,
	height 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
入力側での処理対象領域の開始座標
radius
Type: System..::..Double
入力側での円板の半径
start_angle
Type: System..::..Double
入力側での処理開始角度
range_angle
Type: System..::..Double
入力側での角度の処理範囲
origin_out
Type: fvalgcli..::..DPNT_T
出力側での円板の回転中心
width
Type: System..::..Double
出力側での処理対象領域の幅
height
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 $

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_inv()
        {
            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 radius;        // 入力側での円板の半径.
            double start_angle;    // 入力側での処理開始角度.
            double range_angle;    // 入力側での角度の処理範囲.
            DPNT_T origin_out;    // 出力側での円板の回転中心.
            double width;        // 出力側での処理対象領域の幅.
            double height;        // 出力側での処理対象領域の高さ.
            f_coord_mode coord_mode;    // 出力側での回転中心位置.

            // 入力座標群 (fnFIE_polar_trans_pnt の結果より)
            double[] psrc_x = {
                95.9614545985655, 95.8459112535103, 95.653648318873, 95.3851289729034, 95.0410001022254, 94.6220907434307, 94.1294100858567, 93.5641450403612, 92.9276573799502, 92.2214804591474, 91.4473155200087, 90.6070275936815, 89.7026410073806, 88.7363345076076, 87.7104360113587, 86.6274169979695, 
                85.4898865551046, 84.3005850932367, 83.0623777437579, 81.7782474566273, 80.4512878141831, 79.0846955784319, 77.681762989769, 76.2458698356829, 74.780475308551, 73.2891096721428, 71.7753657569044, 70.2428903045161, 68.6953751825716, 67.1365484905459, 65.5701655784774, 64, 
                62.4298344215226, 60.8634515094541, 59.3046248174284, 57.7571096954839, 56.2246342430956, 54.7108903278572, 53.219524691449, 51.7541301643171, 50.318237010231, 48.9153044215681, 47.5487121858169, 46.2217525433727, 44.9376222562421, 43.6994149067634, 42.5101134448954, 41.3725830020305, 
                40.2895639886413, 39.2636654923924, 38.2973589926194, 37.3929724063185, 36.5526844799913, 35.7785195408526, 35.0723426200498, 34.4358549596388, 33.8705899141433, 33.3779092565693, 32.9589998977746, 32.6148710270966, 32.346351681127, 32.1540887464897, 32.0385454014345, 32, 
                32.0385454014345, 32.1540887464897, 32.346351681127, 32.6148710270966, 32.9589998977746, 33.3779092565693, 33.8705899141433, 34.4358549596388, 35.0723426200498, 35.7785195408526, 36.5526844799913, 37.3929724063185, 38.2973589926194, 39.2636654923924, 40.2895639886413, 41.3725830020305, 
                42.5101134448954, 43.6994149067633, 44.9376222562421, 46.2217525433727, 47.5487121858169, 48.9153044215681, 50.318237010231, 51.7541301643171, 53.2195246914489, 54.7108903278572, 56.2246342430956, 57.7571096954839, 59.3046248174284, 60.863451509454, 62.4298344215226, 64, 
                65.5701655784774, 67.1365484905459, 68.6953751825716, 70.2428903045161, 71.7753657569044, 73.2891096721428, 74.780475308551, 76.2458698356829, 77.681762989769, 79.0846955784319, 80.4512878141831, 81.7782474566273, 83.0623777437579, 84.3005850932366, 85.4898865551046, 86.6274169979695, 
                87.7104360113587, 88.7363345076076, 89.7026410073806, 90.6070275936815, 91.4473155200087, 92.2214804591474, 92.9276573799502, 93.5641450403612, 94.1294100858567, 94.6220907434307, 95.0410001022254, 95.3851289729034, 95.653648318873, 95.8459112535103, 95.9614545985655, 96, };

            double[] psrc_y = {
                62.4298344215226, 60.8634515094541, 59.3046248174284, 57.7571096954839, 56.2246342430955, 54.7108903278572, 53.219524691449, 51.7541301643171, 50.318237010231, 48.9153044215681, 47.5487121858169, 46.2217525433727, 44.9376222562421, 43.6994149067634, 42.5101134448954, 41.3725830020305, 
                40.2895639886413, 39.2636654923924, 38.2973589926194, 37.3929724063185, 36.5526844799913, 35.7785195408526, 35.0723426200498, 34.4358549596388, 33.8705899141433, 33.3779092565693, 32.9589998977746, 32.6148710270966, 32.346351681127, 32.1540887464897, 32.0385454014345, 32, 
                32.0385454014345, 32.1540887464897, 32.346351681127, 32.6148710270966, 32.9589998977746, 33.3779092565693, 33.8705899141433, 34.4358549596388, 35.0723426200498, 35.7785195408526, 36.5526844799913, 37.3929724063185, 38.2973589926194, 39.2636654923924, 40.2895639886413, 41.3725830020305, 
                42.5101134448954, 43.6994149067633, 44.9376222562421, 46.2217525433727, 47.5487121858169, 48.9153044215681, 50.318237010231, 51.7541301643171, 53.219524691449, 54.7108903278572, 56.2246342430956, 57.7571096954839, 59.3046248174284, 60.8634515094541, 62.4298344215226, 64, 
                65.5701655784774, 67.1365484905459, 68.6953751825716, 70.2428903045161, 71.7753657569044, 73.2891096721428, 74.780475308551, 76.2458698356829, 77.681762989769, 79.0846955784319, 80.4512878141831, 81.7782474566273, 83.0623777437579, 84.3005850932367, 85.4898865551046, 86.6274169979695, 
                87.7104360113587, 88.7363345076076, 89.7026410073806, 90.6070275936815, 91.4473155200087, 92.2214804591474, 92.9276573799502, 93.5641450403612, 94.1294100858567, 94.6220907434307, 95.0410001022254, 95.3851289729034, 95.653648318873, 95.8459112535103, 95.9614545985655, 96, 
                95.9614545985655, 95.8459112535103, 95.653648318873, 95.3851289729034, 95.0410001022254, 94.6220907434307, 94.1294100858567, 93.5641450403612, 92.9276573799502, 92.2214804591474, 91.4473155200087, 90.6070275936815, 89.7026410073806, 88.7363345076076, 87.7104360113587, 86.6274169979695, 
                85.4898865551046, 84.3005850932367, 83.0623777437579, 81.7782474566273, 80.4512878141831, 79.0846955784319, 77.681762989769, 76.2458698356829, 74.7804753085511, 73.2891096721428, 71.7753657569044, 70.2428903045161, 68.6953751825716, 67.136548490546, 65.5701655784774, 64, };

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

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

                // パラメータの設定.
                coord_mode = f_coord_mode.F_PT_UPPER;
                origin_in.x = (double)num_pnt / 2;
                origin_in.y = (double)num_pnt / 2;

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

                origin_out.x = num_pnt - 1;
                origin_out.y = 0;

                width = num_pnt;
                height = num_pnt;

                // 処理の実行.
                status = api.fnFIE_polar_trans_pnt_inv(psrc, pdst, num_pnt,
                                                                        origin_in, radius, start_angle, range_angle,
                                                                        origin_out, width, height,
                                                                        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, num_pnt, num_pnt);
                    api.fnFIE_img_clear(save_img, 128);

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

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

                    api.fnFIE_save_png(ResultDir + "/fnFIE_polar_trans_pnt_inv.png", save_img, -1);
                }
            }
            finally
            {
                // オブジェクトの開放.
                save_img.Dispose();
                psrc.Dispose();
                pdst.Dispose();
                val.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

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

Public Partial Class FIE
    ''' <summary>
    ''' 点群間の逆極座標変換.
    ''' </summary>
    <FvPluginExecute> _
    Public Sub fnFIE_polar_trans_pnt_inv()
        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 radius As Double
        ' 入力側での円板の半径.
        Dim start_angle As Double
        ' 入力側での処理開始角度.
        Dim range_angle As Double
        ' 入力側での角度の処理範囲.
        Dim origin_out As DPNT_T
        ' 出力側での円板の回転中心.
        Dim width As Double
        ' 出力側での処理対象領域の幅.
        Dim height As Double
        ' 出力側での処理対象領域の高さ.
        Dim coord_mode As f_coord_mode
        ' 出力側での回転中心位置.
        ' 入力座標群 (fnFIE_polar_trans_pnt の結果より)
        Dim psrc_x As Double() = {95.9614545985655, 95.8459112535103, 95.653648318873, 95.3851289729034, 95.0410001022254, 94.6220907434307, _
            94.1294100858567, 93.5641450403612, 92.9276573799502, 92.2214804591474, 91.4473155200087, 90.6070275936815, _
            89.7026410073806, 88.7363345076076, 87.7104360113587, 86.6274169979695, 85.4898865551046, 84.3005850932367, _
            83.0623777437579, 81.7782474566273, 80.4512878141831, 79.0846955784319, 77.681762989769, 76.2458698356829, _
            74.780475308551, 73.2891096721428, 71.7753657569044, 70.2428903045161, 68.6953751825716, 67.1365484905459, _
            65.5701655784774, 64, 62.4298344215226, 60.8634515094541, 59.3046248174284, 57.7571096954839, _
            56.2246342430956, 54.7108903278572, 53.219524691449, 51.7541301643171, 50.318237010231, 48.9153044215681, _
            47.5487121858169, 46.2217525433727, 44.9376222562421, 43.6994149067634, 42.5101134448954, 41.3725830020305, _
            40.2895639886413, 39.2636654923924, 38.2973589926194, 37.3929724063185, 36.5526844799913, 35.7785195408526, _
            35.0723426200498, 34.4358549596388, 33.8705899141433, 33.3779092565693, 32.9589998977746, 32.6148710270966, _
            32.346351681127, 32.1540887464897, 32.0385454014345, 32, 32.0385454014345, 32.1540887464897, _
            32.346351681127, 32.6148710270966, 32.9589998977746, 33.3779092565693, 33.8705899141433, 34.4358549596388, _
            35.0723426200498, 35.7785195408526, 36.5526844799913, 37.3929724063185, 38.2973589926194, 39.2636654923924, _
            40.2895639886413, 41.3725830020305, 42.5101134448954, 43.6994149067633, 44.9376222562421, 46.2217525433727, _
            47.5487121858169, 48.9153044215681, 50.318237010231, 51.7541301643171, 53.2195246914489, 54.7108903278572, _
            56.2246342430956, 57.7571096954839, 59.3046248174284, 60.863451509454, 62.4298344215226, 64, _
            65.5701655784774, 67.1365484905459, 68.6953751825716, 70.2428903045161, 71.7753657569044, 73.2891096721428, _
            74.780475308551, 76.2458698356829, 77.681762989769, 79.0846955784319, 80.4512878141831, 81.7782474566273, _
            83.0623777437579, 84.3005850932366, 85.4898865551046, 86.6274169979695, 87.7104360113587, 88.7363345076076, _
            89.7026410073806, 90.6070275936815, 91.4473155200087, 92.2214804591474, 92.9276573799502, 93.5641450403612, _
            94.1294100858567, 94.6220907434307, 95.0410001022254, 95.3851289729034, 95.653648318873, 95.8459112535103, _
            95.9614545985655, 96}

        Dim psrc_y As Double() = {62.4298344215226, 60.8634515094541, 59.3046248174284, 57.7571096954839, 56.2246342430955, 54.7108903278572, _
            53.219524691449, 51.7541301643171, 50.318237010231, 48.9153044215681, 47.5487121858169, 46.2217525433727, _
            44.9376222562421, 43.6994149067634, 42.5101134448954, 41.3725830020305, 40.2895639886413, 39.2636654923924, _
            38.2973589926194, 37.3929724063185, 36.5526844799913, 35.7785195408526, 35.0723426200498, 34.4358549596388, _
            33.8705899141433, 33.3779092565693, 32.9589998977746, 32.6148710270966, 32.346351681127, 32.1540887464897, _
            32.0385454014345, 32, 32.0385454014345, 32.1540887464897, 32.346351681127, 32.6148710270966, _
            32.9589998977746, 33.3779092565693, 33.8705899141433, 34.4358549596388, 35.0723426200498, 35.7785195408526, _
            36.5526844799913, 37.3929724063185, 38.2973589926194, 39.2636654923924, 40.2895639886413, 41.3725830020305, _
            42.5101134448954, 43.6994149067633, 44.9376222562421, 46.2217525433727, 47.5487121858169, 48.9153044215681, _
            50.318237010231, 51.7541301643171, 53.219524691449, 54.7108903278572, 56.2246342430956, 57.7571096954839, _
            59.3046248174284, 60.8634515094541, 62.4298344215226, 64, 65.5701655784774, 67.1365484905459, _
            68.6953751825716, 70.2428903045161, 71.7753657569044, 73.2891096721428, 74.780475308551, 76.2458698356829, _
            77.681762989769, 79.0846955784319, 80.4512878141831, 81.7782474566273, 83.0623777437579, 84.3005850932367, _
            85.4898865551046, 86.6274169979695, 87.7104360113587, 88.7363345076076, 89.7026410073806, 90.6070275936815, _
            91.4473155200087, 92.2214804591474, 92.9276573799502, 93.5641450403612, 94.1294100858567, 94.6220907434307, _
            95.0410001022254, 95.3851289729034, 95.653648318873, 95.8459112535103, 95.9614545985655, 96, _
            95.9614545985655, 95.8459112535103, 95.653648318873, 95.3851289729034, 95.0410001022254, 94.6220907434307, _
            94.1294100858567, 93.5641450403612, 92.9276573799502, 92.2214804591474, 91.4473155200087, 90.6070275936815, _
            89.7026410073806, 88.7363345076076, 87.7104360113587, 86.6274169979695, 85.4898865551046, 84.3005850932367, _
            83.0623777437579, 81.7782474566273, 80.4512878141831, 79.0846955784319, 77.681762989769, 76.2458698356829, _
            74.7804753085511, 73.2891096721428, 71.7753657569044, 70.2428903045161, 68.6953751825716, 67.136548490546, _
            65.5701655784774, 64}

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

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

            ' パラメータの設定.
            coord_mode = f_coord_mode.F_PT_UPPER
            origin_in.x = CDbl(num_pnt) / 2
            origin_in.y = CDbl(num_pnt) / 2

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

            origin_out.x = num_pnt - 1
            origin_out.y = 0

            width = num_pnt
            height = num_pnt

            ' 処理の実行.
            status = api.fnFIE_polar_trans_pnt_inv(psrc, pdst, num_pnt, origin_in, radius, start_angle, _
                range_angle, origin_out, width, height, 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, num_pnt, num_pnt)
                api.fnFIE_img_clear(save_img, 128)

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

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

                api.fnFIE_save_png(ResultDir & "/fnFIE_polar_trans_pnt_inv.png", save_img, -1)
            End If
        Finally
            ' オブジェクトの開放.
            save_img.Dispose()
            psrc.Dispose()
            pdst.Dispose()
            val.Dispose()
        End Try
    End Sub
End Class

See Also