python - 在 Python 中的循环内循环
问题描述
下面是使用拖动来模拟炮弹运动的代码,其中 solve_euler 是一个预定义的函数,它产生一个数组数组(如表格)的值。在这些值中,xs 和 ys 是为这段代码导出的,称为 xs_euler 和 ys_euler。这些值是直到时间 t1 的炮弹的 x 和 y 坐标(solve_euler 函数中使用的某个定义的数字,在本例中为 t1 = 300)。我现在要做的是绘制新的 x 和 y 值的图表(通过乘以速度和时间),显示路径如何根据发射角度而有所不同。以下是我目前拥有的:
import math as m
import matplotlib.pylab as plot
import numpy
n_steps = 1000
theta = numpy.arange(m.pi/36, m.pi/2, m.pi/36)
v = 200
g = 9.81
initial_conditions = [0, 0, 88.38834764831843, 88.38834764831843]
values_euler = solve_euler(initial_conditions, 300, n_steps)
xs_euler, ys_euler = values_euler[:,0], values_euler[:,1]
plt.plot(xs_euler, ys_euler, color='blue', linestyle='--')
plt.xlim(0,1500)
plt.ylim(0,800);
t = numpy.linspace(0, 500, num=1000) # Set time as 'continous' parameter.
for i in theta: # Calculate trajectory for every angle
for k in t:
x = ((v*k)*xs_euler*numpy.cos(i)) # get positions at every point in time
y = ((v*k)*ys_euler*numpy.sin(i))-((0.5*g)*(k**2))
plot.plot(x1, y1) # Plot for every angle
plot.show() # And show on one graphic
在这里应该很明显,我不知道如何在循环中使用 xs_euler 和 ys_euler,同时还能够在时间和发射角度 (theta) 上进行循环。有人可以告诉我哪里出了问题以及如何解决吗?
解决方案
我假设您希望您的图表在所有时间点都是 y(t) vs x(t),在这种情况下,您需要在迭代每个 theta 时随时间存储 x 和 y 的所有值:
我的建议是为给定的 theta 创建一个 x 和 y 值的列表,并随着时间的推移进行迭代。如果您不需要存储它,可以使用列表推导来覆盖 i 的每个值。如果你这样做,我会把它写到数据框的列中。
我有点困惑的另一件事是你的情节在某些情况下被称为“plt”,而在其他情况下被称为“情节”。我建议保持它与您导入它的方式一致(在 中作为“情节” import matplotlib.pylab as plot
)
for i in theta: # Calculate trajectory for every angle
x = [((v*k)*xs_euler*numpy.cos(i)) for k in t] # get positions at every point in time
y = [((v*k)*ys_euler*numpy.sin(i))-((0.5*g)*(k**2)) for k in t]
plot.plot(x, y) # Plot for every angle
plot.show()
推荐阅读
- python - Pandas:循环获取特定列值
- reactjs - 反应你不应该使用
或 withRouter() 外部 - javascript - 如何添加值以从输入字段中选择标签?
- linux - 如何清理输出,以更少的 CPU 使用率打印所需的信息
- amazon-web-services - 在 dynamodb 上查询不同过滤器的正确方法是什么?
- python - Discord.py 帮助命令(对编辑消息做出反应)
- git - 在 gitbash 上显示文件夹名称而不是整个目录路径
- arrays - 基于另一个工作表的列表框 vlookup 代码
- reactjs - 如何使模态覆盖整个屏幕并同时响应网络?
- android - tawk.to 在 React Native 中的集成?