擅长:python、mysql、java
<p>下面是一个简单的实现。我只改变每10步的运动矢量,这样就可以直观地检查边界反射。当运动向量更新时,粒子闪烁红色。在</p>
<p>技巧如<a href="https://stackoverflow.com/a/48777868/7207392">ħere</a>所述是“展开”边界框。相反,我们让粒子自由移动,然后将空间折叠到边界框中。在</p>
<pre><code>import numpy as np
import pylab
from matplotlib.animation import FuncAnimation
xy = np.random.uniform(-1, 1, (2, 200))
xy[0, :160] = np.abs(xy[0, :160])
xy[0, 160:] = -np.abs(xy[0, 160:])
xy += 1
f, a = pylab.subplots()
pxy, = pylab.plot(*xy, 'o')
def init():
a.set_xlim(0, 2)
a.set_ylim(0, 2)
return pxy,
def update(frame):
global inc, xy
if frame % 1 < 0.01:
inc = np.random.normal(0, 0.01, xy.shape)
pxy.set_markerfacecolor('red')
elif frame % 1 < 0.11:
pxy.set_markerfacecolor('blue')
xy += inc
fxy = np.abs((xy+2)%4-2)
pxy.set_data(*fxy)
return pxy,
anim = FuncAnimation(f, update, frames=np.arange(1200) / 10,
init_func=init, blit=True)
pylab.show()
</code></pre>