计算立方体的横截面

时间:2013-12-04 22:17:56

标签: algorithm sorting

如下图所示,立方体的横截面可以是:

  1. 三角形
  2. 矩形
  3. 五角大楼(不是DREW)
  4. 六角
  5. 假设我们得到一个六边形。我们可以得到交叉平面与立方体每侧的交点,并得到六边形ABCDEF。问题是:我们如何对交叉点进行排序,以便将六边形ABCDEF划分为4个三角形ABCACDADEAEF

    enter image description here


    请注意,积分的顺序非常重要,因为如果订单错误,我将无法将其绘制出来。我想将它们分成三角形,因为我想在OpenGL中将它们可视化。


    非常感谢@ HugoRune的回答。这里有一些我希望与你们分享的结果。左图是3D体积的横截面(从任意角度)。右图是3D体积的maximum intensity projection的结果。 Cross Section of A Box (Real Data)

2 个答案:

答案 0 :(得分:7)

交点是一个凸多边形,因此任何适用于凸多边形的排序都可以在这里使用。

特别是:

  • 计算质心Z =(A + B + C + ...)/ numPoints
  • 计算正常n = AB交叉BC
  • 从质心到第一点获取Vector:ZA
  • 将所有点P按signed angle ZA顺序排列到ZP,正常n为 (有角度==角度(ZA,ZP)*符号(n点(ZA交叉ZP))

答案 1 :(得分:1)

不失一般性,我假设立方体的边缘沿笛卡尔轴对齐(如果不是这样,可以调整算法以使用相应的主轴)。

然后,您可以利用两个相邻点的特殊属性:它们共有一个(并且只有一个)坐标,例如: A和B都位于界定立方体的上平面(例如,相同的z),B和C共享另一个共同平面,D和E共享相同的z,但它与A和B共有的值不同。使用此信息可帮助您对点进行排序。

据我所知,所描述的程序应适用于所有交叉路口的情况。在立方体两侧的平面内总是存在边缘,该边缘连接立方体边缘上的两个点。

相关问题