如何使用 4D 矩阵将 2D 点(或 Z=0 的 3D)转换为 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 始终是原始值。
我究竟做错了什么 ?
这是我的四个示例值以及上述数学的结果
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