Не прыгающий мяч на участке питона

#python #matplotlib #spyder

#питон #matplotlib #спайдер

Вопрос:

Я хочу сделать анимированный сюжет о бале. Что — то вроде того, что здесь изображено. Проблема в том, что я хочу, чтобы он не отскакивал от оси, вместо этого я хочу, чтобы он продолжал двигаться по сюжету, но появлялся с другой стороны, как зеркало.

 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)gt;10   vel[bounce] = -vel[bounce]   circles.set_offsets(pos)   plt.draw()   plt.pause(0.05)  plt.show()  

Ответ №1:

Один из способов сделать это-просто заменить строку 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)gt;10    pos[bounce]=-pos[bounce]  circles.set_offsets(pos)   plt.draw()   plt.pause(0.05)   plt.show()  

И это результат:

введите описание изображения здесь

Комментарии:

1. Спасибо, приятель, мне действительно было трудно это сделать.