我一直在查看有关确定一个点是否位于多边形内的帖子,而答案对我来说太模糊、抽象或复杂。因此,我将尝试针对我需要做什么提出我的问题。
我有一组描述非直线(有时是闭合多边形)的点。我有一个矩形“视图”区域。我需要尽可能有效地确定是否有任何线段(或多边形边界)通过视图区域。
我不能简单地测试每个点以查看它是否位于视图区域内。一个线段可以通过该区域而实际上没有任何点位于该区域内(即,该线被绘制穿过该区域)。
这是我要确定的示例(红色表示该函数应该为点集返回 true,蓝色表示它应该返回 false,示例使用直线和矩形,因为我不是艺术家)。
我希望能够解释的另一个条件(尽管方法/函数可能是单独的),不仅要确定多边形的边界是否穿过矩形区域,还要确定该区域是否完全被多边形包围。这里的细微差别是,在上面首先描述的情况下,如果我只关心绘制边框,该方法应该返回 false。但在此处描述的情况下,如果我需要填充多边形区域,那么我需要该函数返回 true。我目前不需要担心测试“甜甜圈”形状的多边形(感谢上帝!)。
这是一个说明细微差别的示例(红色矩形没有单个顶点或边框段穿过屏幕区域,但仍应将其视为在屏幕上):
对于“是否有任何线段或多边形边框穿过或位于屏幕上?” 问题 我知道我可以想出一个解决方案(尽管可能不是一个有效的解决方案)。尽管它更冗长,但条件对我来说是清楚的。但第二个“是屏幕上的多边形区域吗?” 问题有点难。我希望有人可能对这样做有一个很好的建议。如果一个解决方案很容易在另一个之上实施,那么,booya。
与往常一样,提前感谢您的任何帮助或建议。
PS我有一个确定线交点的功能,但是使用它来比较每个段与屏幕区域的每一侧似乎有点过头了,因为屏幕区域总是一个普通的 [0, 0, width, height]长方形。不是有什么捷径吗?