我希望将一个由3D点和一个平面组成的数组,根据它们在平面两侧的位置将这些点分成2个数组。在我深入调试之前,我想发布一下我的计划,以确保我对如何完成此操作的理解是正确的。
基本上,我有一个由3个点组成的平面,我使用以下伪代码:
var v1 = new vector(plane.b.x-plane.a.x, plane.b.y-plane.a.y, plane.b.z-plane.a.z);
var v2 = new vector(plane.c.x-plane.a.x, plane.c.y-plane.a.y, plane.c.z-plane.a.z);
我对这两个向量执行叉积操作,以获得法向量。
然后,我循环遍历我的点数组,将它们转换为向量并计算其与法向量的点积。
接着,我使用点积来确定点所在的位置。
这听起来行得通吗?
plane.a
乘以法向量来消除内部循环中的“向量化”,从而得到一个恒定的偏移量。这样可以消除2次减法,并且本质上与@Ali的解决方案相同:他的d
是-dot(plane_normal, plane.a)
。 - comingstormabovePlane = a*x + b*y + c*z > 0.0;
。 - Anne Quinn