【问题标题】:How to form Concave shapes from convex pieces Confusion如何从凸块形成凹形
【发布时间】:2011-10-05 02:53:24
【问题描述】:

嘿,所以我在之前的回答中被告知要从多个凸形中制作凹形,我会执行以下操作:

如果您没有凸包,请执行包包装算法 得到一个包含所有点的凸边界(再次相当 快速地)。 en.wikipedia.org/wiki/Gift_wrapping_algorithm

选择边界上的一个点作为算法的起点。


现在,遍历形状上的以下点, 但不在凸边界上。 找到一个后,使用以下顶点创建一个新形状 起始点到找到的非边界点。 最后将起始点设置为找到的越界点

递归现在是你的朋友:对每个新的执行完全相同的过程 您制作的子形状。


我对一件事感到困惑。当连续的两个顶点超出边界时,您会怎么做?到达第一个点后,您将起点连接到它,但是在您再次开始迭代后立即遇到另一个边界点,只剩下 2 个顶点可以使用:起点和新的边界点。 我错过了什么?

为了说明我的问题,这里有一个与这个问题有关的形状:如果有人可以在上面画图并使用它来完成算法的步骤,那就太好了。并使用第 1 点作为起点。

谢谢!

【问题讨论】:

  • 您的意思是要从凹形创建凸形,而不是相反??
  • 或者你想对多边形进行三角测量?即从多个(凸)三角形形成一个凹多边形??
  • @Darren:不完全是,我想。如果一个多边形是凸的但具有三个以上的顶点,那么所描述的算法将不理会它,并且提问者的描述是“凸块”,而不是具体的三角形。三角剖分将提供a 解决方案,但对于一开始是凸的形状,或具有较大凸顶点子集的形状,它会将其拆分为比需求要求更多的多边形。
  • 前面的答案是完全错误的,仅此而已。建议的算法将不起作用。谷歌“多边形分区”,或在 Joseph O'Rourke 的“C 语言计算几何”中查找。

标签: c++ math graphics sfml concave


【解决方案1】:

假设您真的想获取一个凸多边形(如您所说明的)并将其分解为凸部分而不引入新顶点,通常的方法称为“剪耳”,并在这篇 Wikipedia 文章中进行了描述,Polygon triangulation .在这种方法中,凸块是三角形,它们必然是凸的。

此问题已在 Stackoverflow 中与 CGAL 计算几何软件一起讨论,C++ 2D tessellation library

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2016-10-21
    • 2011-05-09
    • 2020-11-02
    • 2011-01-28
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2012-04-30
    相关资源
    最近更新 更多