来自 3 个点的平面方程未返回正确值
Plane Equation From 3 Points Not Returning Correct Values
作为我在高中 classes 进行的光线追踪实验的一部分,我需要完成它以便从 3 个不同的点得到平面方程的 4 个部分。 4 个部分我的意思是在等式 Ax + By + Cz = D 中我需要找到 A、B、C 和 D。我理解这背后的数学是相对简单的向量数学,但我的代码似乎不起作用。
我用3个点构造Plane对象的函数如下:
Plane::Plane(Vec3 A, Vec3 B, Vec3 C)
{
//Getting both vectors
Vec3 AB = B - A;
Vec3 AC = C - A;
//Cross Product
Vec3 cr = AB.cross(AC);
a = cr.getX();
b = cr.getY();
c = cr.getZ();
d = a * A.getX() + b * B.getY() + c * C.getZ();
}
在这里,Vec3 只是一个包含 (x, y, z) 的向量 class,并且函数名称很容易解释(我希望如此)。
输出示例:
如果我将向量 (-3, 0, 1)、(2, 3, 0) 和 (0, 2, 3) 放入其中,我会得到以下结果
A = 8
B = -13
C = 1
D = -60
A、B、C正确,D错误
我不完全确定代码有什么问题,因为它有时会在某些向量上得到正确的输出,有时会得到正确的部分,或者有时什么都不正确,这让我相信有一个数学错误。感谢任何帮助。
由于在您的示例中,您获得了正确的 A、B 和 C 值,因此首先要查看 D 的计算。
在 d
的计算中,您使用了三个不同向量的一部分。这不是 D
的等式所说的。您想使用 one 向量中的三个部分。
d = a * A.getX() + b * A.getY() + c * A.getZ();
这应该适用于三个向量中的任何一个。
作为我在高中 classes 进行的光线追踪实验的一部分,我需要完成它以便从 3 个不同的点得到平面方程的 4 个部分。 4 个部分我的意思是在等式 Ax + By + Cz = D 中我需要找到 A、B、C 和 D。我理解这背后的数学是相对简单的向量数学,但我的代码似乎不起作用。
我用3个点构造Plane对象的函数如下:
Plane::Plane(Vec3 A, Vec3 B, Vec3 C)
{
//Getting both vectors
Vec3 AB = B - A;
Vec3 AC = C - A;
//Cross Product
Vec3 cr = AB.cross(AC);
a = cr.getX();
b = cr.getY();
c = cr.getZ();
d = a * A.getX() + b * B.getY() + c * C.getZ();
}
在这里,Vec3 只是一个包含 (x, y, z) 的向量 class,并且函数名称很容易解释(我希望如此)。
输出示例: 如果我将向量 (-3, 0, 1)、(2, 3, 0) 和 (0, 2, 3) 放入其中,我会得到以下结果
A = 8
B = -13
C = 1
D = -60
A、B、C正确,D错误
我不完全确定代码有什么问题,因为它有时会在某些向量上得到正确的输出,有时会得到正确的部分,或者有时什么都不正确,这让我相信有一个数学错误。感谢任何帮助。
由于在您的示例中,您获得了正确的 A、B 和 C 值,因此首先要查看 D 的计算。
在 d
的计算中,您使用了三个不同向量的一部分。这不是 D
的等式所说的。您想使用 one 向量中的三个部分。
d = a * A.getX() + b * A.getY() + c * A.getZ();
这应该适用于三个向量中的任何一个。