直線の射影変換

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

Syntax

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

Parameters

src
Type: fvalgcli..::..DLINE_T
入力点座標
dst
Type: fvalgcli..::..DLINE_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>
        /// <remarks>
        /// 変換行列.
        ///        |7 2 0|
        ///     |3 6 0|
        ///     |6 4 4|
        ///  
        ///  直線.
        ///        (a, b, c) = (1, -1, -10)
        ///  
        ///  期待値.
        ///        a: 1.0
        ///        b: 0.44927536231884091
        ///        c: -1.3043478260869568
        /// 
        /// </remarks>
        [FvPluginExecute]
        public void fnFIE_geotrans_perspective_line()
        {
            int status = (int)f_err.F_ERR_NONE;

            DLINE_T src = new DLINE_T();        // 入力直線.
            DLINE_T dst = new DLINE_T();        // 出力直線.
            FMATRIX_PTR mat = FMATRIX_PTR.Zero;    // 同次変換行列.

            // 期待値.
            const double ans_a = 1.0;
            const double ans_b = 0.44927536231884091;
            const double ans_c = -1.3043478260869568;

            try
            {
                // 同次変換行列の確保.
                mat = api.fnFIE_mat_aalloc(3, 3);

                // 同次変換行列の値を設定する.
                mat = FMATRIX_PTR.alloc(3, 3);
                {
                    mat[0, 0] = 7; mat[0, 1] = 2; mat[0, 2] = 0;
                    mat[1, 0] = 3; mat[1, 1] = 6; mat[1, 2] = 0;
                    mat[2, 0] = 6; mat[2, 1] = 4; mat[2, 2] = 4;
                };


                // 入力直線の設定.
                src.a = 1;
                src.b = -1;
                src.c = -10;

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

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

                // 結果出力.
                ConsoleOut.WriteFunctionName(":\n");
                Console.Write("\tdst: a={0:f3}, b={1:f3}, c={2:f3} ...", dst.a, dst.b, dst.c);
                ConsoleOut.IsTrue(
                    DblEqual(dst.a, ans_a) &&
                    DblEqual(dst.b, ans_b) &&
                    DblEqual(dst.c, ans_c)
                );
            }
            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>
    ''' <remarks>
    ''' 変換行列.
    '''        |7 2 0|
    '''     |3 6 0|
    '''     |6 4 4|
    '''  
    '''  直線.
    '''        (a, b, c) = (1, -1, -10)
    '''  
    '''  期待値.
    '''        a: 1.0
    '''        b: 0.44927536231884091
    '''        c: -1.3043478260869568
    ''' 
    ''' </remarks>
    <FvPluginExecute> _
    Public Sub fnFIE_geotrans_perspective_line()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim src As New DLINE_T()
        ' 入力直線.
        Dim dst As New DLINE_T()
        ' 出力直線.
        Dim mat As FMATRIX_PTR = FMATRIX_PTR.Zero
        ' 同次変換行列.
        ' 期待値.
        Const  ans_a As Double = 1.0
        Const  ans_b As Double = 0.449275362318841
        Const  ans_c As Double = -1.30434782608696

        Try
            ' 同次変換行列の確保.
            mat = api.fnFIE_mat_aalloc(3, 3)

            ' 同次変換行列の値を設定する.
            mat = FMATRIX_PTR.alloc(3, 3)
            If True Then
                mat(0, 0) = 7
                mat(0, 1) = 2
                mat(0, 2) = 0
                mat(1, 0) = 3
                mat(1, 1) = 6
                mat(1, 2) = 0
                mat(2, 0) = 6
                mat(2, 1) = 4
                mat(2, 2) = 4
            End If




            ' 入力直線の設定.
            src.a = 1
            src.b = -1
            src.c = -10

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

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

            ' 結果出力.
            ConsoleOut.WriteFunctionName(":" & vbLf)
            Console.Write(vbTab & "dst: a={0:f3}, b={1:f3}, c={2:f3} ...", dst.a, dst.b, dst.c)
            ConsoleOut.IsTrue(DblEqual(dst.a, ans_a) AndAlso DblEqual(dst.b, ans_b) AndAlso DblEqual(dst.c, ans_c))
        Finally
            ' オブジェクトの開放.
            mat.Dispose()
        End Try
    End Sub
End Class

See Also