计算两个四边形交点的方法?

时间:2012-10-30 06:12:53

标签: c++ math geometry

  

可能重复:
  A simple algorithm for polygon intersection

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

但是因为在这个我只关注四面形状的特殊情况下,我想知道是否有一种快速的方法可以使用而不需要在我的应用程序中包含一个完整的附加库。

到目前为止,我所想到的只有:

  1. 在两个形状上相对于彼此运行'多边形点'
  2. 将每个多边形的每个边相互交叉
  3. 上述两个步骤是否最终确定了构成最终交叉区域的所有点?有更好的方法可以使用吗?

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

2 个答案:

答案 0 :(得分:5)

你没有说明2个quadriliterals是凸的还是没有;如果是,则可以使用常规凸多边形交集算法,例如http://www.iro.umontreal.ca/~plante/compGeom/algorithm.html

从我可以收集的内容来看,它不需要任何奇特的数据结构或操作,因此实现起来应该不难。

答案 1 :(得分:1)

凸多边形的交点相对容易。 Google,它在SO和其他地方都有很多资源。

并非所有的四边形都是凸的。两个非凸四边形的交点可能会导致多个断开的多边形,只有它们的点会给你很少,但如果这是你需要的,那么前进并交叉每对边。它将比任何通用方法更容易和更快

即使是凸形,哑蛮力法也可能更快。你必须做一些测试才能找到最适合你的方法。

相关问题