如何在Python中生成可重复平铺的随机分布点图?
实现可平铺的随机点分布
要实现指定距离后重复的随机点图,核心是给基础随机点添加周期性偏移量,让基础区域的副本沿x、y轴平铺。以下是具体实现方案:
关键逻辑
- 先定义一个基础单元区域(比如你原代码里的-20到20范围,对应单元尺寸40)
- 生成该单元内的随机点
- 生成多组x、y方向的偏移值,将基础点与这些偏移值相加,得到所有平铺后的点
- 绘制全部点,即可看到周期性重复的效果
完整代码
import numpy as np import matplotlib.pyplot as plt # 参数配置 n = 3 # 基础单元内的随机点数量 cell_size = 40 # 控制重复的单位距离(对应原区域的宽度) tile_count = 2 # 向正负方向各平铺的单元数 # 生成基础单元内的随机点 base_points = np.random.uniform(-cell_size/2, cell_size/2, size=(n, 2)) # 生成所有需要的平铺偏移量 x_offsets = np.arange(-tile_count, tile_count+1) * cell_size y_offsets = np.arange(-tile_count, tile_count+1) * cell_size # 组合成网格状的偏移对 offsets = np.array(np.meshgrid(x_offsets, y_offsets)).T.reshape(-1, 2) # 计算所有平铺后的点:基础点 + 每个偏移量 tiled_points = base_points[:, np.newaxis, :] + offsets[np.newaxis, :, :] tiled_points = tiled_points.reshape(-1, 2) # 绘图展示 plt.figure(figsize=(8, 8)) plt.scatter(tiled_points[:, 0], tiled_points[:, 1], color='red') # 调整坐标轴范围,方便观察重复规律 plt.xlim(-tile_count*cell_size - cell_size/2, tile_count*cell_size + cell_size/2) plt.ylim(-tile_count*cell_size - cell_size/2, tile_count*cell_size + cell_size/2) plt.grid(True, linestyle='--', alpha=0.5) plt.title('周期性平铺的随机点分布') plt.show()
代码说明
cell_size:直接决定重复间隔,比如设为40时,每间隔40个单位就会出现完全一致的点分布tile_count:控制平铺范围,数值越大,画面中显示的重复单元越多- 用numpy广播机制批量计算所有平铺点,比循环更高效
- 网格线可以辅助你直观验证点的周期性重复效果
内容的提问来源于stack exchange,提问作者Yeknic
相关产品推荐
相关产品推荐

