【发布时间】:2013-03-19 06:26:31
【问题描述】:
我正在尝试获取一组 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) -
我需要在高焦时重新学习这一点,而且谷歌的顶级结果很难看到精神,所以我想添加一个简化的答案:(a,b,c)是飞机的正常, (x, y, z) 是重点,没有“d”,它是假的,不会伤害你,移动两者,使平面停在 (0, 0, 0),无需标准化任何东西......它是基本上是
abovePlane = a*x + b*y + c*z > 0.0;
标签: math 3d pseudocode