python 地块上没有弹跳球
Not-bouncing ball on python plot
我想制作一个关于球的动画情节。就像下面的那个。问题是我不希望它在轴上弹跳,而是希望它在绘图中不断移动,但出现在另一边就像一面镜子。
import numpy as np
import matplotlib.pyplot as plt
plt.figure(1)
plt.clf()
plt.axis([-10,10,-10,10])
n=10
pos=(20*np.random.sample(n*2)-10).reshape(n,2)
vel=(0.3*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(100):
pos=pos+vel
bounce=abs(pos)>10
vel[bounce] = -vel[bounce]
circles.set_offsets(pos)
plt.draw()
plt.pause(0.05)
plt.show()
一种方法是将行 vel[bounce] = -vel[bounce]
替换为 pos[bounce]=-pos[bounce]
。这会将到达框架的球的位置重置为框架的相对边缘。
完整代码如下:
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure(1)
plt.axis([-10,10,-10,10])
n=10
pos=(20*np.random.sample(n*2)-10).reshape(n,2)
vel=(0.3*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(100):
pos=pos+vel
bounce=abs(pos)>10
pos[bounce]=-pos[bounce]
circles.set_offsets(pos)
plt.draw()
plt.pause(0.05)
plt.show()
这是输出:
我想制作一个关于球的动画情节。就像下面的那个。问题是我不希望它在轴上弹跳,而是希望它在绘图中不断移动,但出现在另一边就像一面镜子。
import numpy as np
import matplotlib.pyplot as plt
plt.figure(1)
plt.clf()
plt.axis([-10,10,-10,10])
n=10
pos=(20*np.random.sample(n*2)-10).reshape(n,2)
vel=(0.3*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(100):
pos=pos+vel
bounce=abs(pos)>10
vel[bounce] = -vel[bounce]
circles.set_offsets(pos)
plt.draw()
plt.pause(0.05)
plt.show()
一种方法是将行 vel[bounce] = -vel[bounce]
替换为 pos[bounce]=-pos[bounce]
。这会将到达框架的球的位置重置为框架的相对边缘。
完整代码如下:
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure(1)
plt.axis([-10,10,-10,10])
n=10
pos=(20*np.random.sample(n*2)-10).reshape(n,2)
vel=(0.3*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(100):
pos=pos+vel
bounce=abs(pos)>10
pos[bounce]=-pos[bounce]
circles.set_offsets(pos)
plt.draw()
plt.pause(0.05)
plt.show()
这是输出: