python - python抛物线拍摄动画与matplotlib
问题描述
我的问题是 circle 不是可迭代的,我该如何解决?我希望抛物线镜头与圆圈一起使用。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation, rc
from IPython.display import HTML
plt.style.use('dark_background')
ax = plt.axes(xlim=(-5, 25), ylim=(-5, 25))
patch = plt.Circle((1, -1), 0.5, fc='b') #figura
X = 30
Y = 30
gravity=9.81
angle=70
velocity=80
vx=velocity * np.cos(np.radians(angle))
vy=velocity * np.sin(np.radians(angle))
t=0
def setup():
patch.center = (10, 10)
ax.add_patch(patch)
return patch
def throwBall():
global X, Y, gravity, t,vx,vy
t +=0.02
X = vx*t
Y = 400 -(vy*t - (gravity/2)*t*t)
patch.center = (X, Y)
return patch
animen = animation.FuncAnimation(fig, throwBall,init_func=setup,frames=360,interval=15,blit=True)
HTML(animen.to_html5_video())
解决方案
@JohanC 说的差不多。根据文档,如果blit=True
“func 必须返回所有被修改或创建的艺术家的迭代”。因此,您必须返回一个艺术家列表或一个元组,即使只有一位艺术家被修改。
我也做了一些外观上的改变。如果您t
在更新函数中递增,为什么不直接将 t 的值作为参数传递给您的更新函数 usingframes = np.arange(0,7.2,0.02)
或等效的东西。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
from matplotlib.patches import Circle
fig = plt.figure()
ax = fig.add_subplot(111, xlim=(0, 500), ylim=(0, 500), aspect='equal')
patch = Circle((1, -1), 10, fc='b')
ax.add_patch(patch)
X = 30
Y = 30
gravity=9.81
angle=70
velocity=80
vx=velocity * np.cos(np.radians(angle))
vy=velocity * np.sin(np.radians(angle))
def setup():
patch.set_center((X, Y))
return (patch,)
def throwBall(t):
global X, Y
X = vx*t
Y = 400 -(vy*t - (gravity/2)*t*t)
patch.set_center((X, Y))
return (patch)
ani = animation.FuncAnimation(fig, throwBall, init_func=setup, frames=np.arange(0,7.2,0.02), interval=20, blit=True)
推荐阅读
- hl7-fhir - HAPI FHIR 中搜索参数“_profile”的使用
- webpack - 如何在 webpack 中使用文件加载器
- javascript - 如何将cloudinary图像同步转换为base64 img?
- css - CSS翻转卡-如何使正面小于背面
- javascript - 检查列表的所有项目是否都是整数字符串
- ruby-on-rails - 如何从目录外执行 docker compose?
- maps - 使用 Mapbox 进行地理编码
- html - CSS在悬停时放大网格图像,但将其周围的所有其他图像移开
- javascript - 使用反应、样式化组件等重新创建具有 n 行和列的动态 css 网格/flexbox 图像库
- java - Gradle:我可以使用 flatDir 存储库来包含源代码和/或 javadocs 吗?