点の射影変換

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

Syntax

C#
public static int fnFIE_geotrans_perspective_point(
	DPNT_T src,
	ref DPNT_T dst,
	FMATRIX_PTR mat
)
Visual Basic
Public Shared Function fnFIE_geotrans_perspective_point ( 
	src As DPNT_T,
	ByRef dst As DPNT_T,
	mat As FMATRIX_PTR
) As Integer

Parameters

src
Type: fvalgcli..::..DPNT_T
入力点座標
dst
Type: fvalgcli..::..DPNT_T%
出力点座標
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_perspective_point()
        {
            int status = (int)f_err.F_ERR_NONE;

            DPNT_T src = new DPNT_T();            // 入力点座標.
            DPNT_T dst = new DPNT_T();            // 出力点座標.
            FMATRIX_PTR mat = FMATRIX_PTR.Zero;    // 同次変換行列.

            const double m00 = 1;
            const double m01 = 2;
            const double m02 = 3;
            const double m10 = 4;
            const double m11 = 5;
            const double m12 = 6;
            const double m20 = 7;
            const double m21 = 8;
            const double m22 = 9;

            try
            {
                // 同次変換行列の確保.
                mat = FMATRIX_PTR.alloc(3, 3);
                {
                    mat[0,0] = m00; mat[0,1] = m01; mat[0,2] = m02;
                    mat[1,0] = m10; mat[1,1] = m11; mat[1,2] = m12;
                    mat[2,0] = m20; mat[2,1] = m21; mat[2,2] = m22;
                };

                // 入力点座標の設定.
                src.x = 10;
                src.y = 11;

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

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

                // 結果出力.
                ConsoleOut.WriteFunctionName(":\t");
                Console.Write("dst({0:f3} , {1:f3}) ...", dst.x, dst.y);
                ConsoleOut.IsTrue(
                    DblEqual(dst.x, (src.x * m00 + src.y * m01 + m02) / (src.x * m20 + src.y * m21 + m22)) &&
                    DblEqual(dst.y, (src.x * m10 + src.y * m11 + m12) / (src.x * m20 + src.y * m21 + m22))
                );
            }
            finally
            {
                // オブジェクトの開放.
                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_perspective_point()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim src As New DPNT_T()
        ' 入力点座標.
        Dim dst As New DPNT_T()
        ' 出力点座標.
        Dim mat As FMATRIX_PTR = FMATRIX_PTR.Zero
        ' 同次変換行列.
        Const  m00 As Double = 1
        Const  m01 As Double = 2
        Const  m02 As Double = 3
        Const  m10 As Double = 4
        Const  m11 As Double = 5
        Const  m12 As Double = 6
        Const  m20 As Double = 7
        Const  m21 As Double = 8
        Const  m22 As Double = 9

        Try
            ' 同次変換行列の確保.
            mat = FMATRIX_PTR.alloc(3, 3)
            If True Then
                mat(0, 0) = m00
                mat(0, 1) = m01
                mat(0, 2) = m02
                mat(1, 0) = m10
                mat(1, 1) = m11
                mat(1, 2) = m12
                mat(2, 0) = m20
                mat(2, 1) = m21
                mat(2, 2) = m22
            End If



            ' 入力点座標の設定.
            src.x = 10
            src.y = 11

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

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

            ' 結果出力.
            ConsoleOut.WriteFunctionName(":" & vbTab)
            Console.Write("dst({0:f3} , {1:f3}) ...", dst.x, dst.y)
            ConsoleOut.IsTrue(DblEqual(dst.x, (src.x * m00 + src.y * m01 + m02) / (src.x * m20 + src.y * m21 + m22)) AndAlso DblEqual(dst.y, (src.x * m10 + src.y * m11 + m12) / (src.x * m20 + src.y * m21 + m22)))
        Finally
            ' オブジェクトの開放.
            mat.Dispose()
        End Try
    End Sub
End Class

See Also