12

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

我知道如何在 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 共面点?

4

1 回答 1

20

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

你有中心C和正常的n。要确定点B是从点A顺时针还是逆时针,请计算 dot( n , cross( A - C , B - C ))。如果结果为正,则BA逆时针方向;如果它是负数,则B从A顺时针方向。

于 2013-01-17T02:00:38.243 回答