1

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

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

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

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

红色表示函数应该返回真,蓝色表示它应该返回假

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

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

红色矩形没有穿过屏幕区域的单个顶点或边框段,但仍应将其视为在屏幕上。

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

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

PS我有一个确定线交点的功能,但是使用它来比较每个段与屏幕区域的每一侧似乎有点过头了,因为屏幕区域总是一个普通的 [0, 0, width, height]长方形。不是有什么捷径吗?

4

2 回答 2

1

您正在搜索的内容被命名为碰撞检测算法Google 搜索将引导您找到各种语言的大量实现以及大量理论

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

好读

于 2011-05-20T07:44:43.610 回答
0

PS我有一个确定线交点的功能,但是使用它来比较每个段与屏幕区域的每一侧似乎有点过头了,因为屏幕区域总是一个普通的 [0, 0, width, height]长方形。不是有什么捷径吗?

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

于 2011-05-20T08:56:30.467 回答