Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算立方体的横截面_Algorithm_Sorting - Fatal编程技术网

Algorithm 计算立方体的横截面

Algorithm 计算立方体的横截面,algorithm,sorting,Algorithm,Sorting,如下图所示,立方体的横截面可以是: 三角 长方形 五角大楼(非德鲁) 六边形 假设我们得到一个六边形。我们可以得到交叉平面与立方体每一侧的交点,并得到六边形ABCDEF。问题是:我们如何对交点进行排序,使六边形ABCDEF可以分成4个三角形ABC,ACD,ADE和AEF 注意点的顺序是非常重要的,因为如果我把顺序弄错了,我就不能画出来。我想把它们分成三角形,因为我想在OpenGL中可视化它们 非常感谢@HugoRune的回答。这里是我想和大家分享的一些结果。左图像是三维体积的横截面(从任意

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

  • 三角
  • 长方形
  • 五角大楼(非德鲁)
  • 六边形
  • 假设我们得到一个六边形。我们可以得到交叉平面与立方体每一侧的交点,并得到六边形
    ABCDEF
    。问题是:我们如何对交点进行排序,使六边形
    ABCDEF
    可以分成4个三角形
    ABC
    ACD
    ADE
    AEF


    注意点的顺序是非常重要的,因为如果我把顺序弄错了,我就不能画出来。我想把它们分成三角形,因为我想在OpenGL中可视化它们


    非常感谢@HugoRune的回答。这里是我想和大家分享的一些结果。左图像是三维体积的横截面(从任意角度)。右侧图像是三维体积的结果。

    在不丧失一般性的情况下,我假设立方体的边沿笛卡尔坐标轴对齐(如果不是这种情况,则可以调整算法以使用各自的主轴)

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


    据我所见,所述程序应适用于所有交叉口情况。立方体边平面内始终有一条边,连接立方体边上的两个点。

    交点是凸多边形,因此任何适用于凸多边形的排序在此处也适用

    特别是:

    • 计算质心Z=(A+B+C+…)/numPoints
    • 计算正常n=AB交叉点BC
    • 获取从质心到第一个点的向量:ZA
    • 通过ZA将所有点P按正常n排序为ZP
      (符号角度==角度(ZA,ZP)*符号(n点(ZA交叉ZP))