如何让Matplotlib动画绘图中小球初始位置固定、每次运行速度随机?
固定初始位置+随机速度的实现方案
完全可以轻松实现,只需要给初始位置的随机生成过程固定随机种子,同时让速度的随机生成保持随机状态即可,修改幅度极小。
修改后的代码
import numpy as np import matplotlib.pyplot as plt plt.figure(1) #elegimos figura en la que plotearemos plt.clf() plt.axis([-10, 10, -10, 10]) n = 10 # 固定随机种子,确保每次运行初始位置完全一致 np.random.seed(42) pos = (20 * np.random.sample(n*2) - 10).reshape(n, 2) # 可选:重置随机状态,避免种子影响后续随机生成(不写也不影响速度的随机性) np.random.seed(None) vel = (0.5 * np.random.normal(size=n*2)).reshape(n, 2) sizes = 100 * np.random.sample(n) + 100 colors = np.random.sample([n, 4]) circles = plt.scatter(pos[:,0], pos[:,1], marker="o", s=sizes, c=colors) for i in range(30): pos = pos + vel#se actualiza posiscion de pelotas a traves de velocidad bounce = abs(pos) > 10 vel[bounce] = -vel[bounce] circles.set_offsets(pos) plt.pause(0.05)
修改说明
- 在生成初始位置
pos前添加np.random.seed(42):固定随机种子后,np.random.sample的输出会完全一致,确保每次运行小球初始位置不变。你可以把42换成任意整数,只要固定即可。 - 速度
vel的生成保持原有逻辑:不固定种子,因此每次运行都会生成不同的随机速度值,满足你的需求。 - 可选的
np.random.seed(None):用来重置随机状态,避免固定种子影响后续的随机操作(比如sizes和colors的生成),如果不需要保持这些元素的随机性,也可以省略这一步。
内容的提问来源于stack exchange,提问作者Fcatalan
相关产品推荐
相关产品推荐

