2Dポイント(またはZ = 0の3D)を4Dマトリックスの2Dポイント(Zは無視される)に変換するにはどうすればよいですか?
MicrosoftのSilverlightを使用して、Matrix3DのMatrix3D定義を使用して2Dコントロールを疑似3Dとして投影しています 。
変換されていないコントロールのポイントの初期2D座標がわかっているので、変換後のポイントの2D位置が必要です。
Silverlight APIは、3Dメソッドに関してはまばらです。
計算を実行するための基本的な数学を提案してください。
詳細を編集する
動いていない。使ってます
x = x0 * matrix[0][0] + y0 * matrix[1][0] + z0 * matrix[2][0] +
w0 * matrix[3][0];
y = x0 * matrix[0][1] + y0 * matrix[1][1] + z0 * matrix[2][1] +
w0 * matrix[3][1];
z = x0 * matrix[0][2] + y0 * matrix[1][2] + z0 * matrix[2][2] +
w0 * matrix[3][2];
入力xとyは0,0であり、結果x、yは0、58.5786です。
HasInverse true bool
IsIdentity false bool
M11 1.0 double
M12 0.0 double
M13 0.0 double
M14 0.0 double
M21 0.0 double
M22 0.70710676908493042 double
M23 0.70710676908493042 double
M24 0.0 double
M31 0.0 double
M32 -0.70710676908493042 double
M33 0.70710676908493042 double
M34 0.0 double
M44 1.0 double
OffsetX 0.0 double
OffsetY 58.578643798828125 double
OffsetZ -141.42135620117187 double
これにより、Zで45度の角度の回転が生成されます。ここで、回転点は平面の下部です。
OffsetXを含むすべてのM1n値は0.0であるため、xは常に元の値になります。
私は何を間違っているのですか?
上記の計算結果を含む4つの値の例を次に示します。
0, 0, 0, 1 -> 0, 58.5786437988281, -141.421356201172, 1
50, 0, 0, 1 -> 50, 58.5786437988281, -141.421356201172, 1
0, 100, 0, 1 -> 0, 129.289320707321, -70.7106792926788, 1
100, 100, 0, 1 -> 100, 129.289320707321, -70.7106792926788, 1
結果の画像を見ると、400x400平面の左上は45,135、右上は355,135、左下は0,400、右下は400,400です。
したがって、テスト値が0,0,0,1.0の場合、xとyは45,135になると予想されます。