来自 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();

这应该适用于三个向量中的任何一个。