我有一个缺少一面的多面体。我有一个库函数,可以在以CCW顺序发送一系列点后帮助关闭边框:
class Mesh {
// points need to be in CCW order when see from the ouside of this polyhedron
void addAFace(std::vector<Point> points);
}
我在边框上找到了顶点并将它们一个接一个地放在一个数组中。从多面体外部看时,如何知道该数组中顶点的顺序是逆时针还是顺时针?
例如,顶点应该是0,1,2,3
的顺序多面体可以是非凸的。
答案 0 :(得分:0)
对于凸多面体:获取不属于该面的多面体中的任何点Px(例如,您的示例中为顶点4,5,6或7)并检查三重积的符号 - 对于CCW顺序应为负值
((P1 - P0) .cross. (P2 - P1)) .dot. (Px - P1)
如果不能保证P0-P3订购正确,那么需要检查所有面顶点三元组的三重产品的迹象
如果多边形是凹的,则需要在给定面附近有一些点但位于多面体内。例如,选择具有锐角内角的任何三重结果顶点,得到三角形的中心,并将该中心沿法线移动一小段距离。检查移位点是否在内部,否则进行反射。