如何在区域或多边形内生成近似等间距点,求Python实现方案
多边形内近似等距点生成Python实现方案
直接使用成熟的第三方库即可完成需求,无需手动实现底层算法,以下是可直接运行的代码示例:
依赖安装
执行以下命令安装所需依赖:
pip install numpy scipy shapely matplotlib
其中matplotlib为可视化可选依赖,不需要可以不装。
完整实现代码
import numpy as np from scipy.spatial import poisson_disk_sample from shapely.geometry import Polygon, Point import matplotlib.pyplot as plt # 1. 定义你的多边形,替换成你自己的多边形顶点坐标即可 # 示例为一个不规则四边形 polygon_vertices = [ (0, 0), (10, 1), (8, 9), (1, 8) ] polygon = Polygon(polygon_vertices) # 2. 获取多边形包围盒范围 min_x, min_y, max_x, max_y = polygon.bounds # 包围盒范围调整为scipy泊松采样的输入格式 bounds = [(min_x, max_x), (min_y, max_y)] # 3. 生成泊松圆盘采样点,核心参数是点之间的最小距离r,可根据需求调整 # r越大点越稀疏,r越小点越密集 min_distance = 1.2 # 泊松采样生成的点天然满足两点之间距离不小于min_distance,即近似等距 points = poisson_disk_sample(bounds, r=min_distance) # 4. 过滤出落在多边形内部的点 points_in_polygon = [] for p in points: if polygon.contains(Point(p)): points_in_polygon.append(p) points_in_polygon = np.array(points_in_polygon) # 以下为可视化可选代码 if __name__ == "__main__": # 绘制多边形 poly_x, poly_y = polygon.exterior.xy plt.plot(poly_x, poly_y, c='black', label='多边形边界') # 绘制内部点 plt.scatter(points_in_polygon[:, 0], points_in_polygon[:, 1], c='blue', s=10, label='内部等距点') plt.legend() plt.axis('equal') plt.show()
参数调整说明
- 替换
polygon_vertices的坐标值即可适配你自己的任意多边形区域 - 修改
min_distance参数即可调整点之间的间距,参数值就是两点之间允许的最小距离
内容的提问来源于stack exchange,提问作者Chau Loi
相关产品推荐
相关产品推荐

