python情节上没有弹跳的球

Posted

技术标签:

【中文标题】python情节上没有弹跳的球【英文标题】:Not-bouncing ball on python plot 【发布时间】:2022-01-13 22:16:51 【问题描述】:

我想制作一个关于球的动画情节。像下面的一样。问题是我希望它不会在轴上反弹,而是希望它在情节中不断移动,但像镜子一样出现在另一边。

 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()

【问题讨论】:

【参考方案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)>10
      
    pos[bounce]=-pos[bounce]
    circles.set_offsets(pos) 
    plt.draw() 
    plt.pause(0.05)
 
plt.show()

这是输出:

【讨论】:

谢谢伙计,我真的很难做到这一点。

以上是关于python情节上没有弹跳的球的主要内容,如果未能解决你的问题,请参考以下文章

球在不可见的盒子内弹跳/移动 ios/xcode

计算线上的弹跳速度

Clojurescript:制作弹跳球的功能性方法

jQuery Animate 2 动作,相同的对象

C++ 函数不更新变量

下拉时 UITableVIew 标头没有弹跳