以任意形状迭代点

时间:2015-06-05 15:23:16

标签: c++ math iteration shape multimap

我有一个点multimap<int,int>的多重图,它围绕(无间隙)任意形状(特定的陆地区域)。我如何迭代任意形状中包含的所有点?

我知道多图不足以确定内部点,因此我有一个额外的点,就是在形状内部(确定形状的内部和外部)。

更多信息:这些点按x排序,因为multimap是一个已排序的容器。所有点都位于网格中,因为我使用的是位图。

2 个答案:

答案 0 :(得分:1)

  1. 如果您的点比1个像素更远,那么按x坐标排序的点将不会非常有用。对它们进行排序,使得应该连接的点彼此相邻。

  2. Draw lines between the points

  3. 找到一个内部点和flood fill形状。如果您自己实现它,则需要迭代形状内的每个像素。

答案 1 :(得分:1)

关于点是否在形状的内部/外部的一个测试是想象从该点到已知在该形状之外的点的光线。计算光线穿过边界的次数,如果此数字为奇数,则该点位于形状内部,如果其均匀点位于形状之外。请参阅ray casting algorithm for a point in polygon

在您的情况下,最简单的方法是拍摄与测试点具有相同x值的垂直光线,(x0,y0)说。让(x0,y1)在你的形状的边界框之外。只需使用相同的x值计算多图中的点数即可。如果它奇怪你在里面,即使你在外面也是如此。

以上假设有关你的形状边界的一些细节:包含形状的完整边界,所以如果形状穿过你的图像边缘,边缘上的点都包含在多图中,你也不会有两个相邻点,因此(x,y)(x,y+1)不在两者中。