如何确定一系列点(或多边形)是否在矩形区域内?

时间:2011-05-20 07:31:25

标签: flex actionscript-3 polygon point-in-polygon line-intersection

我一直在看关于确定一个点是否位于多边形内的帖子,而且答案对我来说太模糊,抽象或复杂。因此,我将尝试针对我需要做的事情提出具体问题。

我有一组描述非直线(有时是闭合多边形)的点。我有一个矩形的“视图”区域。我需要尽可能有效地确定任何线段(或多边形边框)是否通过视图区域。

我不能简单地测试每个点以查看它是否位于视图区域内。段可以通过该区域而区域内实际上没有任何点(即,该区域被划分为该区域)。

以下是我想要确定的示例(红色表示函数应该为点集返回true,蓝色表示它应该返回false,示例使用直线和矩形,因为我不是艺术家)。

Red indicates the function should return true, blue indicates it should return false

我希望能够考虑的另一个条件(尽管方法/函数可能是一个单独的条件),不仅要确定多边形的边界是否通过矩形区域,还要确定该区域是否完全被包含在多边形。这里的细微差别在于,在上面首次描述的情况下,如果我只关心绘制边框,则该方法应该返回false。但是在这里描述的情况下,如果我需要填充多边形区域那么我需要函数返回true。我目前不需要担心测试“甜甜圈”形状的多边形(感谢上帝!)。

这是一个说明细微差别的示例(红色矩形没有单个顶点或边框段通过屏幕上的区域,但仍应在屏幕上考虑):

The red rectangle does not have a single vertex or border segment passing through the on-screen region, but it should still be considered on-screen.

对于“任何线段或多边形边界是否通过或位于屏幕上?”问题我知道我可以提出一个解决方案(虽然可能不是一个有效的解决方案)。虽然它更冗长,但条件对我来说很清楚。但第二个“是屏幕上的多边形区域?”问题有点困难。我希望有人可能会有这样做的好建议。如果一个解决方案很容易在另一个上面实现,那么,博雅。

一如既往,请提前感谢您的任何帮助或建议。

PS我有一个确定线交叉的功能,但是用它来比较每个线段到屏幕区域的每一边似乎有点过分,因为屏幕上的区域始终是普通的[0,0,宽度,高度]矩形。是不是有某种捷径?

2 个答案:

答案 0 :(得分:1)

您要搜索的内容名为Collision Detection Algorithm Google搜索会引导您使用各种语言和大量理论进行大量实施

背后有很多几何理论,从最简单的平分微积分到约束Delaunay三角剖分和Voronoi图(仅仅是例子)。它取决于对象的形状,尺寸的数量,并确保所需的精确度与计算时间之间的比率; - )

好读

答案 1 :(得分:0)

  

PS我有一个确定的功能   线交叉,但似乎   过度使用它来比较每个   分段到屏幕的每一侧   区域,因为屏幕上的区域是   总是普通的[0,0,宽度,高度]   长方形。是不是有某种   短切?

这不是一种矫枉过正,在这里是必要的。我能想到的唯一一种快捷方式是将值[0,0,宽度,高度]硬编码到该函数中并稍微简化一下。