我有一个3D点列表。我知道它们都是共面的。我有要对其进行排序的中心,也有要点和中心所在的平面的法线。如何测试一个点是否在另一点的右边(或左边)?

我了解如何在2D模式下进行操作。 Sort points in clockwise order?解释了如何比较2d点。因此,我认为我需要以某种方式将所有点和中心隐蔽到局部2d平面坐标中。我怎样才能做到这一点?这是解决此问题的最有效方法吗?

//from link:
// a and b are points
//center is the center around which to determine order
//int num = (a.x-center.x) * (b.y-center.y) - (b.x - center.x) * (a.y - center.y);
//if num=0 then they're on the same line
//if num <0 or num>0 then a is to the left or right of b

我将如何调整它以处理3d共面点?

最佳答案

无需将所有内容都转换为2D。

您有中心C和法线n。若要确定点B是从点A顺时针还是逆时针,请计算点(n,cross(A-C,B-C))。如果结果是肯定的,则B与A逆时针旋转;否则,B与A逆时针旋转。如果为负,则B是A的顺时针方向。

关于math - 将3d共面点列表按顺时针或逆时针排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14370636/

10-12 16:07