【问题标题】:Convex Decomposition of a Complex Polygon?复杂多边形的凸分解?
【发布时间】:2011-10-10 01:37:07
【问题描述】:

对于我的 2D 物理系统 (box2D) 和 OpenGL,需要将复杂多边形分解为凸多边形。确保模型符合这一点很容易。但是,我还想随着模拟的进行编辑多边形,所以我需要一种动态的方法来将现有的多边形分解成更多仍然凸的多边形。

我希望这张图有助于描述我所追求的:

我的问题是,是否有现有的库可以做到这一点?如果不是,那么我自己最不容易出错的方法是什么?

(我正在查看 Boost,它同时具有 Geometry 和 Polygon 模块,但文档证明有点太深奥了,我不知道是否可以做我想做的事情。)

【问题讨论】:

  • 绝对不理解你的方程式--B - A 应该是 B 中 与 A 重叠的那块,我不知道 A*B 可能意思是,当然不是它怎么能等于 C3
  • @Matt - 抱歉,我的方程式是倒退的。 A * B 应该找到交点,B - A 应该找到 A 的非重叠部分。运算符本身,我只是为了需要运算符而投入,我不确定这种实际的运算符是什么事情会是这样。
  • 交点传统上用倒置的 u 形表示,^ 可能是你可以用 ascii 做的最好的。 A 的非重叠部分是 A - B,这正是 not B_A!相当混乱。另外,找到A和B的相交边形成的顶点的方法是你想要的吗?
  • @Clairvoire 我认为您正在寻找交集运算符∩。要产生差异,您需要一个补码:B-A 是 B∩!A 在集合符号中,交集只是 B∩A
  • @Matt - 我想它会是其中的一部分,但给我带来麻烦的主要问题是找到正确的现有顶点来连接它们,以形成凸多边形

标签: c++ algorithm boost geometry


【解决方案1】:

我认为this 是您正在寻找的。​​p>

至于寻找交点,那只是一个小代数;对于任意两条线段,很容易推导出相应的线('rise over run' 等),

y = a1*x + b1

y = a2*x + b2

那么交点 (x', y') 是

x' = (b2 - b1) / (a1 - a2)

y' = a1*x' + b1

当然,这是线的交点,要确定线段实际相交,您需要使用 x、y 坐标进行简单的范围检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2012-03-25
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2020-11-02
    相关资源
    最近更新 更多