是否有算法可以找到彼此设定距离的所有点?或者所有正在触摸的矩形?
我在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
答案 0 :(得分:0)
谢谢mmgp - 我确实实现了连接组件标记算法 - 这是一个很棒的主意。