【问题标题】:Method to calculate the intersection of two quadrilaterals? [duplicate]计算两个四边形相交的方法? [复制]
【发布时间】:2012-10-19 11:23:34
【问题描述】:

可能重复:
A simple algorithm for polygon intersection

我正在寻找有关如何快速计算两个任意方向四边形的交集的大纲(没有预设角角或边长限制)。我只是想简单地检查它们是否相交,但希望得到构成结果相交区域的点。我知道通常多边形相交不是一个小问题,并且有一些可用的库可以做得很好。

但由于在这种特殊情况下我只关心四个边的形状,我想知道是否有一种快速方法可以使用,而无需在我的应用程序中包含整个额外的库。

到目前为止,我想到的是:

  1. 在两个形状上相对于彼此运行“多边形中的点”
  2. 将每个多边形的每条边彼此相交

上述两个步骤是否最终让我得到了构成结果交叉区域的所有点?有没有更好的方法使用?

如果我能得到构成结果区域的点的正确顺序,那将是 nice。这不是强制性的——如果你知道任何聪明/快速的方法来做这件事(凸壳?)我会很感激任何建议。

【问题讨论】:

  • 四边形是一种特殊情况(IIRC 你总是可以把它们分成两个三角形,即使是凹的)所以一个通用的算法可能是矫枉过正的。
  • 请注意,结果不一定是四边形。如果输入是非凸的,您可能会得到两个不连通的四边形。如果它们是凸的,你可能仍然会得到一个六边形的结果。

标签: c++ math geometry


【解决方案1】:

凸多边形的交集相对容易。谷歌一下,SO和其他地方都有很多资源。

不是所有的四边形都是凸的。两个非凸四边形的相交会导致几个不连贯的多边形,只有它们的点会给你带来很少的好处,但如果这是你需要的,请继续与每对边相交。这将比任何通用方法更容易和更快

即使对于凸形,哑蛮力方法也可能更快。您必须进行一些测试才能找出最适合您的方法。

【讨论】:

    【解决方案2】:

    您没有说明 2 个四边形是否是凸的;如果是,您可以使用正凸多边形相交算法,例如http://www.iro.umontreal.ca/~plante/compGeom/algorithm.html

    据我所知,它不需要任何奇特的数据结构或操作,因此应该不难实现。

    【讨论】:

    • 无法访问网址,禁止访问。
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2011-12-16
    • 2012-04-06
    • 2012-11-10
    • 2017-03-17
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多