【发布时间】:2012-10-04 16:31:15
【问题描述】:
假设我们有:
Vector3 vec;//has some random values
Matrix4x4 mat;//has some random values as well
现在我想将它们相乘以从中得到一个 Vector3。
Vector3 mult = vec * mat;
这个函数能实现吗:
void Matrix4x4::Transform( Vector3 &oPoint )
{
float fX = oPoint.GetX();
float fY = oPoint.GetY();
float fZ = oPoint.GetZ();
oPoint.SetX( fX * this->matrix[0][0] + fY * this->matrix[0][1] + fZ * this->matrix[0][2] + this->matrix[0][3]);
oPoint.SetY( fX * this->matrix[1][0] + fY * this->matrix[1][1] + fZ * this->matrix[1][2] + this->matrix[1][3]);
oPoint.SetZ( fX * this->matrix[2][0] + fY * this->matrix[2][1] + fZ * this->matrix[2][2] + this->matrix[2][3]);
}
如果没有,你能引导我走向正确的方向吗?
【问题讨论】:
-
您当然可以编写使用它的代码。但是,如果将 Matrix4x4 视为 3x3 矩阵,为什么要以 4x4 命名呢?
-
@PeteBecker:可能是因为它用于与 3 向量相乘。从数学上讲,这个操作没有定义。为此,您需要一个行秩为 3 的矩阵,即 3×n 矩阵。然而,我们可以简单地定义我们考虑的所有向量和矩阵都是无限秩的,并且在给定元素数量之后的所有内容都是 0。在这种情况下,在 3→4 乘法中,隐式第 4 个元素为零并匹配 OP 给出的代码.
-
@datenwolf - 是的,当然。但这并没有说明这样做是否合适,或者 Jose 是否打算这样做。
-
我理解你为什么说它是 3x3,因为我做的最后一次操作总是为零。但我想要的只是我从这里得到的向量是正确的,既然你说它是正确的,那就好了。谢谢大家的回复。
标签: c++ vector matrix-multiplication