划分区域的算法 - 找到彼此接近的点

时间:2013-01-26 02:32:46

标签: algorithm polygon rectangles convex-hull convex-polygon

是否有算法可以找到彼此设定距离的所有点?或者所有正在触摸的矩形?

我在n x n的样本矩形中划分平面(在lat / lon坐标系中,在某些限制中),并且每个矩形从0到7得到一个值。我需要能够为每个值显示岛。 n> 100 - 可能是15000。

我写了一些非常强力的代码,但我只是设法得到一些非常粗糙的矩形......

我的输入示例:

111111111111111122222111
111221122222111122211111
111222222222111112211111
111222222111111112211111
111221111113311112111111
111111111113311111111111

以上,使用矩形中的点定义(每个1和2以及其他是我通过一些采样获得的矩形......) - 我最终有几千个 - 可能是十万个小矩形,我会喜欢各种地区。

我发现我可以使用凸包算法得到这些区域 - 如果我可以将矩形(或它们的中心点)正确地分成区域。

在我的函数输入中,我只得到具有相同度量的矩形。

示例:

1111111111111111     111
111  11     1111   11111
111         11111  11111
111      11111111  11111
111  111111  1111 111111
11111111111  11111111111


                22222
   22  22222    222
   222222222     22
   222222        22
   22            2

我想找到一些算法,这样我就可以得到接触的矩形,或者彼此相距一定距离的点,在不同的集合中(它们有绝对坐标),所以我可以运行凸包结果集上的算法。

由于矩形是从采样中创建的,因此它们的宽度/高度相同。

有这样的事吗?

我的代码是在VB.NET中,但C#或任何语言或伪代码都有帮助。

非常感谢。

编辑:

我有各种各样的测试,比如

Public Function AreTwoRectanglesNearEachOther(ByRef one As RectangleF, ByRef two As RectangleF) As Integer
        If Math.Abs(one.Right - two.Left) <= distance_lat Then
            Return 1    ' one is before two
        ElseIf Math.Abs(two.Right - one.Left) <= distance_lat Then
            Return -1   ' one is after two
        ElseIf Math.Abs(two.Top - one.Bottom) <= distance_lon AndAlso one.Right - two.Left > 0 Then
            Return 2    ' one is above two
        ElseIf Math.Abs(one.Top - two.Bottom) <= distance_lon AndAlso one.Right - two.Left > 0 Then
            Return -2   ' one is below two
        Else
            Return 0    ' they are not next to each other
        End If
    End Function

其中distance_lat和distance_lon是dim_lat / 10,分别是dim_lon / 10

1 个答案:

答案 0 :(得分:0)

谢谢mmgp - 我确实实现了连接组件标记算法 - 这是一个很棒的主意。