如下图所示,立方体的横截面可以是:
假设我们得到一个六边形。我们可以得到交叉平面与立方体每侧的交点,并得到六边形ABCDEF
。问题是:我们如何对交叉点进行排序,以便将六边形ABCDEF
划分为4个三角形ABC
,ACD
,ADE
和AEF
。
请注意,积分的顺序非常重要,因为如果订单错误,我将无法将其绘制出来。我想将它们分成三角形,因为我想在OpenGL中将它们可视化。
非常感谢@ HugoRune的回答。这里有一些我希望与你们分享的结果。左图是3D体积的横截面(从任意角度)。右图是3D体积的maximum intensity projection的结果。
答案 0 :(得分:7)
交点是一个凸多边形,因此任何适用于凸多边形的排序都可以在这里使用。
特别是:
答案 1 :(得分:1)
不失一般性,我假设立方体的边缘沿笛卡尔轴对齐(如果不是这样,可以调整算法以使用相应的主轴)。
然后,您可以利用两个相邻点的特殊属性:它们共有一个(并且只有一个)坐标,例如: A和B都位于界定立方体的上平面(例如,相同的z),B和C共享另一个共同平面,D和E共享相同的z,但它与A和B共有的值不同。使用此信息可帮助您对点进行排序。
据我所知,所描述的程序应适用于所有交叉路口的情况。在立方体两侧的平面内总是存在边缘,该边缘连接立方体边缘上的两个点。