给定一个点的坐标,我如何确定它是否在任意形状内?
形状由一系列点定义,我不知道形状“闭合”的位置,我真正需要帮助的部分是找出形状被关闭的位置。
这是一张图片来说明我的意思更好一点:
答案 0 :(得分:29)
最简单的方法是从该点投射光线并计算它穿过边界的次数。如果它是奇数,则该点在内部,即使该点在外面。
维基:http://en.wikipedia.org/wiki/Point_in_polygon
请注意,这仅适用于多种形状。
答案 1 :(得分:1)
如果你想确定一个点P是否处于任意形状,我只需要从P开始进行洪水填充。如果你的洪水填充离开预定的边界框,你就在形状之外。否则,如果您的洪水填充终止,那么您将处于以下形状:)
我认为这个算法是O(N ^ 2),其中N是点数,因为最大面积与N ^ 2成正比。
维基百科:Flood Fill
答案 2 :(得分:0)
实际上,如果给出一系列点数,您可以按如下方式检查形状的接近程度:
考虑数组中给出的点P[i]
和P[i+1]
对 - 它们形成您形状边界的某些部分。您需要检查的是,是否存在两个相交的段,可以在O(N^2)
时间内检查(只需检查所有可能的这些段对)。如果存在交叉点,则表示您的形状已关闭
注意:您必须注意不要忘记检查段P[0],P[n-1]
(即数组中的第一个和最后一个点)。