找到凸包的最小边界框

时间:2013-12-22 19:14:28

标签: java c++ opengl vertex convex-hull

假设我有一个双面凸包,现在我如何获得所述凸包的右/左上/下角,现在让我们说N可能是3而三角坐标是0,050,0 0,50或其他什么,我们知道角落是什么,0,50算作右上角和左上角,所以有一些方法来获得这个而不是我在这里,其中Left_Bottom等是向量和values是一个向量数组

    Left_Bottom = values[0];
    Left_Top = values[0];
    Right_Bottom = values[0];
    Right_Top = values[0];
    for (int i = 1; i < values.length; i++) {
        if (!Left_Bottom.XisLess(values[i])) {
            if (Left_Bottom.YisLess(values[i])) {
                Left_Bottom = values[i];
            }
        }

        if (!Left_Top.XisLess(values[i])) {
            if (!Left_Top.YisLess(values[i])) {
                Left_Top = values[i];
            }
        }

        if (Right_Bottom.XisLess(values[i])) {
            if (Right_Bottom.YisLess(values[i])) {
                Right_Bottom = values[i];
            }
        }

        if (Right_Top.XisLess(values[i])) {
            if (!Right_Top.YisLess(values[i])) {
                Right_Top = values[i];
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

  1. 如果您正在寻找找到有限点集的凸包的问题,请查看here。您可以在O(n * log n)
  2. 中找到几种解决方案

    enter image description here

    1. 如果您只是寻找此凸包的边界矩形的四个角,实际上您正在寻找凸包的最小边界框

      • 如果边界框与坐标轴平行,则只需在所有这些凸包船体点中找到min_xmin_ymax_xmax_y。然后四个角(顺时针)是:

        1. (min_x,min_y)

        2. (max_x,min_y)

        3. (max_x,max_y)

        4. (min_x,max_y)

    2. enter image description here

      • 如果边界框与坐标轴不平行,则变得复杂。查看herehere中介绍的参考资料。

      enter image description here