3d 如何将二维点与4D矩阵相乘

3d 如何将二维点与4D矩阵相乘,3d,matrix,2d,4d,3d,Matrix,2d,4d,如何使用4D矩阵将二维点(或Z=0的三维点)转换为二维点(忽略Z) 我正在使用MicrosoftsSilverlight使用Matrix3D将2D控件投影为伪3D 我知道未转换控件中某个点的初始二维坐标,并且我想要转换后该点的二维位置 silverlight API在3D方法方面很少使用 请建议进行计算的基础数学 这是一个来自 编辑更多详细信息 它不起作用。 我正在使用 x = x0 * matrix[0][0] + y0 * matrix[1][0] + z0 * matrix[2][0]

如何使用4D矩阵将二维点(或Z=0的三维点)转换为二维点(忽略Z)

我正在使用MicrosoftsSilverlight使用Matrix3D将2D控件投影为伪3D

我知道未转换控件中某个点的初始二维坐标,并且我想要转换后该点的二维位置

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度角旋转,其中旋转点是平面的底部

包括偏移量x在内的所有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平面的左上角为45135,右上角为355135,左下角为0400,右下角为400400


因此,对于测试值0,0,0,1.0,我希望x和y为45135,我不确定是否有快捷方式,但您想要的是:

newX = oldx * mat.M11 + oldY * mat.M21 + mat.OffsetX;
newX = oldx * mat.M12 + oldY * mat.M22 + mat.OffsetY;
(假设oldZ为零,将忽略newZ值)

编辑:更好的方法是:

Vector3D oldPos(oldx, oldy, 0.0f);
Vector3D newPos = oldPos * matrix;

您的新坐标是:
newPos.X
newPos.Y

将2D向量展开为4D向量-(X,Y,0,1);这是中指定的三维矢量。将4D向量乘以4D矩阵,从而得到一个新的4D向量,从中获取前2个分量


如果矩阵指定某种透视投影,则需要除以最后一个分量,即,如果得到的向量是(x,y,z,w),则最终坐标是(x/w,y/w,z/w)。如果矩阵没有透视投影,那么w=1,最后的向量就是(x,y,z)

@rob:矩阵值是多少?我发布了一个长而详细的回答,因为我无法在这里添加回复,管理员对此进行了详细说明。如果他们能检查我是否是新用户,而不是仅仅删除它,或者给我留个便条,或者把它添加到问题中,那就太好了。详细信息现在添加到原来的问题中。@rob,你的矩阵转换为58.57。。。在Y方向(请参见偏移),以便输出正确。你是如何生成矩阵的?看起来矩阵不是你想要的,而不是矩阵*向量运算失败。我使用了内置的silverlight投影,然后使用了它创建的矩阵,但它似乎有一个问题,即所有的X值都是0。你能给我一个4d矩阵来描述45度的平面吗以旋转点为基准的Y轴角度,例如,一幅大画从你身上掉落。或者一个网站,有能力产生这样的东西,我宁愿避免数学。