【问题标题】:Finding the minimum bounding box of a convex hull找到凸包的最小边界框
【发布时间】:2014-01-11 01:15:32
【问题描述】:

假设我有一个侧面凸包,现在我如何获得所述凸包的右/左上/下角,现在假设 N 为 3,三角形坐标为 0,0 50,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];
            }
        }
    }

【问题讨论】:

  • 您将在什么情况下使用它,即您寻找更好解决方案的原因是什么?另外:什么是“值”向量?只是一个包含船体中所有点的向量还是其他什么?
  • 另外,你的标题和你的问题有点不同步;你是想找到所有角落还是只找到四个? (上/下/左/右)
  • 只是四个最极端的角落,用于 2d 照明的应用,不过我在 opengl 中已经记录下来

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


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

  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)

  • 如果边界框不平行于坐标轴,这将变得复杂。查看herehere 中介绍的参考以了解实现。

【讨论】:

  • 这有帮助,但我需要的是边界框的角位于凸包的最极端的角上,不过谢谢,这有帮助
  • @Slymodi 查看我提到的第二个链接,您可以在其中找到解决方案。祝你好运。
猜你喜欢
  • 2020-06-04
  • 1970-01-01
  • 2016-06-10
  • 2012-06-18
  • 1970-01-01
  • 2014-07-17
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多