问题描述
作为我在高中班上正在进行的光线示踪剂实验的一部分,我需要做一下,这样我才能从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
这应该适用于三个向量中的任何一个。