总的来说,我要做的是首先确定网格,然后很容易检查该网格上是否有东西。
这些是步骤:
旋转所有东西,这样你就只有水平线和垂直线。
每 x 值计算你有多少分。
- 每个值计算你有多少分。
伪代码:
xcount is array of int
ycount is array of int
for x=0 to width-1 do
for y=0 to height-1 do
foreach point do
if point.x = x then
xcount[x]++
if point.y = y then
ycount[y]++
对于您的最后一张图片,结果将是这样的:
x-count:1,0,0,0,3,0,2,0,1,0,0,0,4,0,0,0,3,0,0,0,4
y-count:2,0,0,0,6,0,0,0,4,0,1,0,3,0,1,0,1
现在我们有一个数组,其中包含 10 种不同网格大小的分数(匹配的点数)。它可能看起来像这样:
gridscores[] = 5,5,0,5,34,5,0,5
XgridSize = index of greatest gridSore
34 显然是最佳匹配,它在索引 5 处,因此网格大小为 5。
现在您知道了网格大小,您可以轻松找到哪些点不在该网格上:
foreach 点做 wrongpoint = (point.x mod XgridSize != 0) 或 (point.y mod YgridSize != 0)
即使有很多错误点,这也有效。我没有详细介绍如何旋转以及如何找到网格的偏移量,但这也许可以帮助您找到正确的方向。