0

3D 変換を定義し、それを点 p ={1000, 0, 0} に適用する必要があります。

たとえば、z 軸を中心に Pi/2 回転を適用する必要があるとします。MatrixTransform3D を使用して変換を定義しました。以下のコードから:

期待される出力: trPoint = {0, 1000, 0}

実際の出力: trPoint = {0, -1000, 0}。

質問: おそらく Transform3D.Transform メソッドが逆変換を適用するのでしょうか?

    private void testTransformationMat() {
        Point3D p = new Point3D(1000, 0, 0);

        double angle = System.Math.PI / 2;

        double cos = System.Math.Cos(angle);
        double sin = System.Math.Sin(angle);

        Matrix3D mat_z = new Matrix3D(cos, -sin, 0, 0,sin, cos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);

        Transform3D tr = new MatrixTransform3D(mat_z);

        Point3D trPoint = tr.Transform(p);

        Debug.WriteLine(trPoint);

    }

編集:私がいつも知っている限り、物事をまっすぐにするために、4x4行列に4x1ベクトルを掛けて同次変換が適用されます。z 軸を中心とした +45 度の回転の場合、右手の慣例により、次のようになります。

0.707 -0.707 0 0         1000        707
0.707 0.707 0 0     X    0       =   707
0 0 1 0                  0           0
0 0 0 1                  1           0

行列を反転すると、乗算は負の y 成分を返しますが、これは Z を中心とした +45 度の回転と一致しません。

0.707 0.707 0 0         1000        707
-0.707 0.707 0 0     X    0       =  -707
0 0 1 0                  0           0
0 0 0 1                  1           0
4

1 に答える 1

0

3 次元変換の概要から

注: Windows Presentation Foundation (WPF) の 3-D は右手系です。つまり、回転の角度値が正の場合、軸を中心に反時計回りに回転します。

于 2015-12-08T18:27:44.320 に答える