【发布时间】:2012-12-31 11:50:51
【问题描述】:
我有一个 3D 点列表。我知道它们都是共面的。我有我想要对它们进行排序的中心以及点和中心所在平面的法线。如何测试一个点是否在另一点的右侧(或左侧)?
我了解如何在 2D 中进行操作。 Sort points in clockwise order? 解释了如何比较二维点。所以我认为我需要以某种方式将所有点和中心转换为局部二维平面坐标。我怎样才能做到这一点?这是解决这个问题最有效的方法吗?
//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 共面点?
【问题讨论】:
-
“顺时针”在 3-d 中没有任何意义,因为它取决于你看飞机的方式。把飞机翻过来,突然顺时针变成了逆时针。
-
@woodchips 这个问题并不是 3-d 独有的。并非所有二维坐标系都以相同的方式定义。在这两种情况下,您只需要定义“顺时针”的含义。
-
我明白你在说什么,知道这是件好事。你认为指定飞机的法线方向会解决这个问题吗?顺时针现在对我来说也没什么意义,但我仍然需要以一致的方向对点进行排序。
-
是的,如果你指定法线方向,那么这会给你一个顺时针的一致定义。
标签: math geometry linear-algebra