我试着从不同的角度绘制一个射弹穿越时间的图表。角度范围从25到60,每个初始角度在图上应有自己的线。“弹丸在空中的总时间”的公式是t的公式。我不确定这个总时间是如何起作用的,因为我应该用不同的初始角度在不同的时间绘制弹丸。我想我需要x,x1,x2,x3,x4,x5和y等价物来绘制所有六个不同角度的图形。但我不知道该怎么处理这段时间。
import numpy as np
import matplotlib.pylab as plot
#initialize variables
#velocity, gravity
v = 30
g = -9.8
#increment theta 25 to 60 then find t, x, y
#define x and y as arrays
theta = np.arange(25,65,5)
t = ((2 * v) * np.sin(theta)) / g #the total time projectile remains in the #air
t1 = np.array(t) #why are some negative
x = ((v * t1) * np.cos(theta))
y = ((v * t1) * np.sin(theta)) - ((0.5 * g) * (t ** 2))
plot.plot(x,y)
plot.show()
首先g是阳性的!修正后,让我们看一些方程式:
你已经知道了,但是让我们花点时间讨论一下。你需要知道什么才能得到粒子的轨迹?
初始速度和角度,对吗?问题是:在给定初始速度为
v=something
和theta=something
的情况下,在一段时间后找到粒子的位置。初始值很重要!那是我们开始实验的时候。所以时间是连续的参数!你不需要飞行时间。还有一件事:角度不能写成
60, 45, etc
,python需要其他东西才能工作,所以需要用数字形式来编写它们,(0,90)=(0,pi/2)。让我们看看代码:
你犯了很多错误。
首先,错误较少,但是
matplotlib.pylab
应该被用来同时访问matplotlib.pyplot
和numpy
(对于类似于matlab的体验),我认为更建议在脚本中使用matplotlib.pyplot as plt
(另请参见this Q&A)。其次,角度是以度为单位的,但是默认情况下数学函数需要弧度。在将角度传递给三角函数之前,必须将角度转换为弧度。
第三,当前代码将
t1
设置为每个角度都有一个时间点。这不是您需要的:您需要计算每个角度(在t
中所做的)的最大时间t
,然后为每个角度创建一个从0
到t
的时间向量,以便绘制!最后,您需要在
y
这两个方面使用相同的绘制时间向量,因为这是力学问题的解决方案:这假设
g
是正的,这在代码中又是错误的。除非你把y
轴设置为向下,但是“投射物”这个词让我认为情况并非如此。所以我要做的是:
我利用了这样一个事实,即
plt.plot
将绘制两个矩阵输入对彼此的列,因此不需要循环角度。我还使用[None,:]
和[:,None]
分别将1d numpyarray
s转换为2d行向量和列向量。通过将行向量和列向量相乘,数组广播确保生成的矩阵按我们希望的方式运行(即timemat
的每一列在100步内从0
变为对应的tmax
)结果:
相关问题 更多 >
编程相关推荐