我想动画多个球在边界上弹跳但不在彼此上。高度边界应以用户确定的恒定速度移动。
所以我试着先在我为它设定的界限内移动球。 这是脚本:
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import animation
from matplotlib.widgets import Slider, Button, RadioButtons
import numpy as np
from time import sleep
import numpy.random as rnd
def norme ( vecteur ):
return np.sqrt( np.dot(vecteur,vecteur) )
B = int(input( "How many balls: " ) )
N=1000
C=1
sx = 1000
sy = 200
Vmax = 50000
VY = 50000
class ball:
def __init__(self):
self.x = rnd.randint(1,sx)
self.y = rnd.randint(1,sy)
self.vx = rnd.randint(1,Vmax)
self.vy = rnd.randint(1,VY)
b = ball()
p, v, balls = [], [], []
nv=np.sqrt(b.vx**2+b.vy**2)
dt = 100/ nv
for i in range(N):
b.x += b.vx * dt
b.y += b.vy * dt
if( b.x >= 1000 or b.x <=0 ):
b.vx = - b.vx/C
if( b.y >= 200 or b.y < 0 ):
b.vy = -b.vy*C
p.append( (b.x,b.y) )
v.append( (b.vx,b.vy) )
fig = plt.figure()
mes_axes = plt.axes(xlim=(0, sx), ylim=(0, sy) )
mes_axes.set_title("Balle")
TexteX = " Paroi amorphe si C = " + str(C) + " est < 1 "
TexteY = " Paroi impulsive si 1/C = " + str(1./C) + " est > 1 "
plt.xlabel(TexteX)
plt.ylabel(TexteY)
balle, = mes_axes.plot( [], [], marker = 'o', markersize = 15.0 )
def initialise():
balle.set_data( [], [] )
return balle,
def AvanceBalle(n,mes_axes,fig):
x, y = p[n]
vx, vy = v[n]
balle.set_data( p[n] )
return balle,
anim = animation.FuncAnimation(fig,AvanceBalle,init_func=initialise,interval=100,frames=N, fargs=(mes_axes,fig), blit=True )
plt.show()
然后我尝试添加到我的循环
for i in range(N):
b.x += b.vx * dt
b.y += b.vy * dt
if( b.x >= 1000 or b.x <=0 ):
b.vx = - b.vx/C
if( b.y >= 200 or b.y < 0 ):
b.vy = -b.vy*C
p.append( (b.x,b.y) )
v.append( (b.vx,b.vy) )
制作多个球的新循环。 这是新的循环并且它无法正常工作
for i in range(B):
b = ball()
balls.append(b)
for i in range(B):
x,y,vx,vy=balls[i].x,balls[i].y,balls[i].vx,balls[i].vy
xax.append((x,y))
yax.append((vx,vy))
for i in range(N):
x += vx * dt
y += vy * dt
if( x >= 1000 or x <=0 ):
vx = - vx/C
if( y >= 200 or y < 0 ):
vy = -vy*C
p.append( (x,y) )
v.append( (vx,vy) )
该程序保持动画1球,而不是其他球。 附:我是python中的初学者和大部分动画部分,我从一个由我的教授交给我的现成脚本中提取。 请注意,其中一些值已经放置,以便我可以在以后更改它们:C = 1