聚类能否实现多边形内点的均匀分布?技术可行性咨询
针对多边形空白区生成均匀分布点的方案建议
k-means、DBSCAN这类聚类方法并不适合你的需求。它们的核心逻辑是对已有数据集进行分组或识别高密度区域,完全无法直接用于识别空白区域并生成均匀分布的新点:
- k-means会将已有数据聚为指定数量的簇,生成的簇中心只会偏向已有数据的密集区,反而会忽略空白区域;
- DBSCAN聚焦于高密度连通区域,空白区本身属于低密度区域,根本不在它的处理范围内。
推荐采用以下更适配的方案:
1. 多边形内均匀采样
这是最直接易实现的方案,分两种模式:
- 随机均匀采样:
- 计算多边形的包围盒(最小/最大x、y坐标);
- 在包围盒范围内生成随机点;
- 用射线法或winding number算法判断点是否在多边形内部,保留符合条件的点直到达到所需数量。
- 网格均匀采样:
- 将多边形包围盒划分为固定尺寸的网格;
- 遍历每个网格的中心(或网格内任意固定位置),判断是否在多边形内;
- 保留所有符合条件的网格点,实现严格的网格状均匀分布。
2. Voronoi图空白填充
基于已有数据点生成Voronoi图,每个Voronoi单元格对应一个已有数据点的“影响区域”。那些面积较大的单元格就是空白区域,你可以在这些单元格的中心或内部生成新点,既能保证新点均匀分布,又能自动与已有数据点保持合理距离。
3. 泊松圆盘采样
如果需要生成的点不仅均匀,还能保证任意两点间的最小距离(避免可视化时过于密集),泊松圆盘采样是最优选择。在多边形范围内执行采样逻辑,同时用点-in-多边形算法过滤掉边界外的点,最终得到的点集分布更贴近真实场景的均匀性。
内容的提问来源于stack exchange,提问作者Martin Kavka
相关产品推荐
相关产品推荐

