【发布时间】:2016-07-07 11:12:09
【问题描述】:
我有一个简单的二维多边形,顶点为 3..n。我需要在这个多边形的内部(而不是边界上)找到一个任意点。我怎样才能找到一个? 这个问题对于凸多边形来说是微不足道的:只需取三个不位于同一条线上的相邻点(因此它们形成一个三角形)。这个三角形的中点保证位于多边形内。但这种方法不适用于非凸多边形。
class Point
{
public double X, Y;
}
Point GetPointInPolygon(Point[] polygon)
{
.....
}
【问题讨论】:
-
你尝试过什么吗? SO 不是代码服务。那么你的想法是什么?应该采取哪些步骤来获得你想要的东西,也许是一些伪代码?
-
如果您想要多边形中由其顶点给出的任何点,则只需返回第一个顶点。如果您想要任何内部点,不包括顶点,则使用两点 (x0,y0)、(x1,y1)en.wikipedia.org/wiki/Linear_equation#Two-point_form 的直线方程,并从 x0 到 x1 获取点。要知道是否有任何一点是内部的,请阅读这篇文章stackoverflow.com/questions/4243042/c-sharp-point-in-polygon,但这超出了您的需要。
-
你读过维基文章吗? en.wikipedia.org/wiki/Point_in_polygon
-
@derloopkat 通过两个任意点获取线方程不适用于非凸多边形,因为并非这条线上的每个点都在多边形内
-
从给定点确定内外有众所周知的解决方案。但是选择一个内部的任意点,可能并不简单,而且更像是数学/算法问题而不是编程问题。我会从探索多边形每个边的中点法线上接近的随机点的想法开始,直到我找到一个在里面,但应该有更好的确定性解决方案。