【问题标题】:Concave Hull taking all points of the polygon on the boundary凹壳取边界上多边形的所有点
【发布时间】:2017-12-24 04:52:29
【问题描述】:

在我的工作中,我必须在边界中包含一些随机的点组。凸面船体占用了额外的空间并且不是最紧凑的形状,因此我对其进行了修改以通过以下方式放松边缘:

i) 为给定数量的点绘制凸包。

ii) 现在对于凸包边界上的每个点 not 检查它是否可以添加到边界(当然这会改变边界形状),同时确保没有给定点位于在新的多边形形状之外。 (多边形中的点算法)

iii) 如果所有点都位于多边形内,则对其他点重复步骤 2。

iv) 如果边界上不能再包含点,则停止。

现在,问题在于任何样本测试集,所有点都包含在边界中。我的疑问是:

i) 这是一个凹壳吗?

ii) 这与我简单地按逆时针顺序排列给定点并通过所有点绘制多边形而不是先绘制凸包有何不同?

iii) 对于任何给定数量的点,我是否可以通过它们绘制一个非自交多边形,使得所有点都位于多边形的边界上?

【问题讨论】:

  • 可能是Sweep line algorithm 可以提供帮助。
  • 我不会称之为“凹”。我相信这被称为“不相交”或“不自相交”。
  • 您能否分享有关获取结果图像“我实际得到的”的源代码。我们期待的结果与图像“我实际得到的”相同。谢谢

标签: c++ mathematical-optimization convex-hull


【解决方案1】:

假设您对 2D 多面体感兴趣(它可以是 nD;它只是更容易解释和可视化 2D!),您需要找到一组点中的四个 Pareto frontiers,这会导致“非您正在寻找的主宰船体。为什么是四个边界?考虑下面的例子

请注意,您需要四个边界(最大与最大、最小与最大、最大与最小和最小与最小)来完全定义多面体的边缘。此外,请注意,船体是否凸面取决于您的观点。上面的示例显示了一个不凸且不连续的边界,因此,多面体也不是凸的且不连续。四个帕累托边界的集合构成了完整的多面体形状。

如果您希望自己实现这一点,这还不错,只需将每个点与每个点进行比较,以比较它们的轴并确定哪个点使两个轴朝有利的方向前进。这称为成对比较。

对于已经用 C++ 编码的解决方案,这应该是一个很好的起点https://github.com/kevinduh/pareto

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 2013-02-24
    • 2015-07-13
    • 2019-12-07
    • 2012-04-30
    • 2016-07-28
    • 2013-07-11
    • 2011-05-09
    • 2019-10-03
    相关资源
    最近更新 更多