3点的平面方程式未返回正确值

问题描述

作为我在高中班上正在进行的光线示踪剂实验的一部分,我需要做一下,这样我才能从3个不同的点获得平面方程的4个部分。我在方程Ax + By + Cz = DI中表示4个部分,需要找到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)的向量类,并且函数名非常容易解释(我希望)。

输出示例: 如果将向量(-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的计算。

在计算BasicAuthenticationMechanism时,使用了三个不同向量的一部分。 d的等式并不是这样做的。您想使用一个向量中的三个部分。

D

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