点群のアフィン変換

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

Syntax

C#
public static int fnFIE_geotrans_affine_npoints(
	DPNT_T_PTR src,
	DPNT_T_PTR dst,
	int num,
	FMATRIX_PTR mat
)
Visual Basic
Public Shared Function fnFIE_geotrans_affine_npoints ( 
	src As DPNT_T_PTR,
	dst As DPNT_T_PTR,
	num As Integer,
	mat As FMATRIX_PTR
) As Integer

Parameters

src
Type: fvalgcli..::..DPNT_T_PTR
入力点座標配列
dst
Type: fvalgcli..::..DPNT_T_PTR
出力点座標配列
num
Type: System..::..Int32
入力点数
mat
Type: fvalgcli..::..FMATRIX_PTR
同次変換行列(3x3の正方行列)

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
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
    {
        /// <summary>
        /// 点群のアフィン変換.
        /// </summary>
        [FvPluginExecute]
        public void fnFIE_geotrans_affine_npoints()
        {
            int status = (int)f_err.F_ERR_NONE;

            DPNT_T_PTR src = IntPtr.Zero;    // 入力点座標配列.
            DPNT_T_PTR dst = IntPtr.Zero;    // 出力点座標配列.
            const int num = 5;                // 入力点数.
            FMATRIX_PTR mat = IntPtr.Zero;    // 同次変換行列.

            const double shift_dx = 11;
            const double shift_dy = 22;

            try
            {
                // 同次変換行列の確保と値の設定.
                mat = api.fnFIE_mat_aalloc(3, 3);
                api.fnFIE_geotrans_calc_shift_matrix(mat, shift_dx, shift_dy);

                // 入力点座標配列の確保と値の設定.
                src = DPNT_T_PTR.alloc(num);
                for (int i = 0; i < num; i++)
                    src[i] = DPNT_T.init(i, i * 10);

                // 出力点座標配列の確保.
                dst = DPNT_T_PTR.alloc(num);

                // 処理の実行.
                status = api.fnFIE_geotrans_affine_npoints(src, dst, num, mat);

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

                // 結果出力.
                ConsoleOut.WriteFunctionName(":");
                bool compare = true;
                for (int i = 0; i < num; i++)
                {
                    if (i % 3 == 0) Console.Write("\n\t");

                    Console.Write("[{0}]({1:f3} , {2:f3}),   ", i, dst[i].x, dst[i].y);

                    if (!DblEqual(dst[i].x, src[i].x + shift_dx) || !DblEqual(dst[i].y, src[i].y + shift_dy))
                    {
                        compare = false;
                    }
                }
                ConsoleOut.IsTrue(compare);
            }
            finally
            {
                // オブジェクトの開放.
                src.Dispose();
                dst.Dispose();
                mat.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_geotrans_affine_npoints()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim src As DPNT_T_PTR = IntPtr.Zero
        ' 入力点座標配列.
        Dim dst As DPNT_T_PTR = IntPtr.Zero
        ' 出力点座標配列.
        Const  num As Integer = 5
        ' 入力点数.
        Dim mat As FMATRIX_PTR = IntPtr.Zero
        ' 同次変換行列.
        Const  shift_dx As Double = 11
        Const  shift_dy As Double = 22

        Try
            ' 同次変換行列の確保と値の設定.
            mat = api.fnFIE_mat_aalloc(3, 3)
            api.fnFIE_geotrans_calc_shift_matrix(mat, shift_dx, shift_dy)

            ' 入力点座標配列の確保と値の設定.
            src = DPNT_T_PTR.alloc(num)
            For i As Integer = 0 To num - 1
                src(i) = DPNT_T.init(i, i * 10)
            Next

            ' 出力点座標配列の確保.
            dst = DPNT_T_PTR.alloc(num)

            ' 処理の実行.
            status = api.fnFIE_geotrans_affine_npoints(src, dst, num, mat)

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

            ' 結果出力.
            ConsoleOut.WriteFunctionName(":")
            Dim compare As Boolean = True
            For i As Integer = 0 To num - 1
                If i Mod 3 = 0 Then
                    Console.Write(vbLf & vbTab)
                End If

                Console.Write("[{0}]({1:f3} , {2:f3}),   ", i, dst(i).x, dst(i).y)

                If Not DblEqual(dst(i).x, src(i).x + shift_dx) OrElse Not DblEqual(dst(i).y, src(i).y + shift_dy) Then
                    compare = False
                End If
            Next
            ConsoleOut.IsTrue(compare)
        Finally
            ' オブジェクトの開放.
            src.Dispose()
            dst.Dispose()
            mat.Dispose()
        End Try
    End Sub
End Class

See Also