【问题标题】:How do I determine if a series of points (or polygon) is within a rectangular region?如何确定一系列点(或多边形)是否在矩形区域内?
【发布时间】:2011-05-20 07:31:25
【问题描述】:

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

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

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

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

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

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

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

与往常一样,提前感谢您的任何帮助或建议。

PS 我有一个确定线交点的函数,但使用它来比较每个段与屏幕区域的每一侧似乎有点过头了,因为屏幕区域总是一个普通的 [0, 0, width , 高度] 矩形。没有捷径吗?

【问题讨论】:

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


    【解决方案1】:

    您要搜索的内容名为 Collision Detection Algorithm Google 搜索将引导您找到各种语言的大量实现以及大量理论

    背后有很多几何理论,从最简单的平分线微积分到约束 Delaunay 三角剖分和 Voronoi 图(这些只是示例)。这取决于对象的形状、维度的数量以及所需的精确度和提供的计算时间之间的比率;-)

    好好读

    【讨论】:

    • 谢谢。我熟悉基于多边形的碰撞检测。这就是我制作原始线段相交检测功能的目的(比如快 3 倍)。听起来您和 alxx 建议我将其用于案例 1。我将检查您的链接以获取有关案例 2 的信息。如果我得到一些工作,我将在此处发布以获取反馈。
    【解决方案2】:

    PS 我有一个函数来确定 线交叉点,但看起来像 过度使用它来比较每个 分段到屏幕的每一侧 区域,因为屏幕上的区域是 总是一个普通的 [0, 0, width, height] 长方形。是不是有某种 捷径?

    这不是矫枉过正,这是必要的。我能想到的唯一捷径是将值 [0, 0, width, height] 硬编码到该函数中并稍微简化一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多