我正在尝试获取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);
我将这两个 vector 的叉积作为法线 vector 。
然后,我遍历点数组并将其转换为 vector ,并针对法线计算点积。
然后,我使用点积来确定该点在哪一侧。
这听起来可行吗?
最佳答案
令a*x+b*y+c*z+d=0
为确定您的飞机的方程式。
将点的[x,y,z]
坐标代入方程式的左侧(我的意思是a*x+b*y+c*z+d
),然后看一下结果的符号。
具有相同符号的点在平面的同一侧。
老实说,我没有检查您所写内容的细节。我想你同意我的建议比较简单。
关于math - 检查平面上的点在哪一侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688232/