遍历任意形状的点

Iterate through points in an arbitrary shape

我有一个点 multimap<int,int> 的多重地图,它围绕(无缝)任意形状(具体来说是陆地区域)。我将如何遍历任意形状中包含的所有点?

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

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

  1. 如果点之间的距离超过 1 个像素,则按 x 坐标排序的点不会很有帮助。对它们进行排序,使应该连接的点彼此相邻。

  2. Draw lines between the points

  3. 找到里面的一个点和 flood fill 形状。如果您自己实现它,则需要为此遍历形状内的每个像素。

一个点是否在形状的 interior/exterior 中的一个测试是想象一条从该点到已知在形状外部的点的射线。计算光线穿过边界的次数,如果这个数是奇数,则该点在形状内部,如果是偶数,则该点在形状外部。参见 ray casting algorithm for a point in polygon

在你的情况下,最简单的方法是采用与你的测试点具有相同 x 值的垂直射线,(x0,y0) 说。让 (x0,y1) 成为形状边界框外的某个点。简单地计算multimap中具有相同x值的点数。奇数在里面,偶数在外面

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