当它们彼此靠近时对点进行分组

Posted

技术标签:

【中文标题】当它们彼此靠近时对点进行分组【英文标题】:grouping points when they are close to each other 【发布时间】:2010-03-03 18:32:29 【问题描述】:

我有带有浮点坐标的二维点 (x,y),当我绘制它们时,如果它们彼此靠近,我需要对点进行分组,并且应该在具有固定大小的矩形的帮助下对它们进行分组。问题是这些矩形不应该相交,所有的点-邻居都应该分组。 如果你附近有一张纸,你可以画一个大矩形,例如 4*5cm - 所有点所在的区域。现在随机放置点,比方说,如果有距离为 1 厘米的点 - 它们应该被分组在 2*3 的矩形中。

我找不到如何制作它的算法,而且性能也很重要...我寻找嵌套、集群,但我需要的有点不同。顺便说一句,如果某些分组矩形必须超出公共区域以适应条件,那就顺其自然吧,这不是问题。例如。你有 4*5 的面积和点

(1,0), (2,1), (4,1), (4,3), (2,4) 

那么结果应该像rectangles (0,0 - 3,2) & (3,1 - 6,3) and one point left (2,4),因为所有其他点都被分组了,这个点现在没有任何邻居。 我的点坐标不是整数而是浮点数,点数可以是几百个(最多 500 个)。而且我不想打破相同矩形上的区域并只计算那里有多少点,我的意思是例如上面我可以制作反应角(0,0 - 3,2),(3,0 - 6,2) , (0,3 - 3,6), (3,3 - 6,6) 并且只总结第一个矩形的点 2,第二个 1(!) 什么意思保持原样,1 代表第三个,1 代表第四个=> 将绘制一个矩形,所有其他点 => 根据任务的错误结果。 有任何想法吗?至少哪些算法会有所帮助,在哪里寻找......

附:现在,结果中的组/点数无关紧要,即例如上面的另一个允许结果可能是 (1,0-4,2) 和 (2,2-5,4) 矩形,并且没有剩余点

【问题讨论】:

所以你可以使用的矩形的尺寸是固定的并且是轴对齐的?我想你想尽量减少遗漏的点数..对吗? 是的,尺寸是固定的 (xy),我不能旋转它们(xy 表示 xy,我不能切换它们 y i>x),并且它们轴对齐。关于最小化,暂时没有。结果不应该包含点,这些点的另一个点比给定的距离更近,仅此而已 必须是矩形且准确吗?您可以使用类似 k 表示聚类:jsfiddle.net/8NpNp/2 你为什么没有在你的问题中放一张图片?这里examples! 【参考方案1】:

一般问题是“nearest neighbor”搜索。解决方案在计算上很困难(时间复杂度)。对人类来说很容易的任务在计算上却不那么容易。

【讨论】:

现在我在用矩形覆盖点时遇到更多问题 :) 假设我知道所有必须分组的点集,如何像所有矩形一样“放置”矩形结果不相交... 我正在突破我对空间分区算法的知识的限制,但似乎 kd-trees 旨在缓解搜索重叠的 O(n^2) 痛苦。实际上,如果您使用 kd-trees 来划分原始点集,则非重叠矩形将是结果的不变属性。 en.wikipedia.org/wiki/Kd_tree 也许,也许......但我担心当我们有比维基示例中更多的数据时,并考虑到我用来覆盖它们的矩形的大小,那么它不会'不工作。我必须多考虑一下。是的,分解关心重叠,但一般分解不关心矩形的大小 - 这就是我不确定的原因。但值得思考。谢谢指点

以上是关于当它们彼此靠近时对点进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如果某些对象彼此不兼容,如何对对象进行分组和合并?

当用户缩小并且注释彼此太靠近时隐藏 MKAnnotations

如何对彼此“接近”的纬度/经度点进行分组?

tarjan 边双连通分量 对点进行分组 每组点都在一个双连通分量里边

在列表中匹配和分组彼此相关(相关)的相似词

当餐厅彼此靠近时,地图看起来人满为患