我尝试用不同的矢量来解决球的轨迹:
1-个不同的x值 2-种不同的速度值 3个不同的角度值
import numpy as np
import math as m
import matplotlib.pylab as pl
def ball(x, theta, v0, y0):
v0= v0/3.6
g = 9.81
theta = m.radians(theta)
return x * m.tan(theta) + y0\
- 1./(2.0 * v0 ** 2.0 ) * g * x**2.0 / (m.cos(theta)**2)
x = np.linspace(0, 10, 100)
#part1
theta = 60
y0 = 1.0
v0= 15.0
y = ball(x, theta, v0, y0)
pl.plot(x, y)
#part2
theta = 60
y0 = 1.0
for v0 in range(10.0, 60.0, 10.0):
y2 = ball(x, theta, v0, y0)
pl.plot(x, y)
#part3
y0 = 1.0
for theta in range(0.0, 112.5, 22.5):
y3 = ball(x, theta, v0, y0)
pl.plot(x, y)
pl.plot(x, y, "r*")
pl.plot(x, y2, "bo")
pl.plot(x, y3, "y^")
pl.xlabel("X")
pl.ylabel("Y")
pl.legend(["x,y","x,y","x,y"])
pl.show()
请帮助我发生什么事情?
答案 0 :(得分:1)
range
函数不接受浮点数作为参数,因此必须使用整数。那么,你可以做的只是将range
函数的每个部分增加10倍,然后在循环内将其减少10倍。例如:
for i in range(int(0.0*10), int(112.5*10), int(22.5*10)):
realI = i/10.0
#now realI is the float you had wanted originally.
答案 1 :(得分:0)
范围(起始值,结束值,步骤)
您不能使用浮动类型数字,使用整数。
答案 2 :(得分:0)
来自{2.7}上的Python 2.7文档:
这是一个用于创建包含算术的列表的通用函数 级数。它最常用于for循环。 参数必须 是纯整数。 如果省略step参数,则默认为 1.如果省略start参数,则默认为0.完整表单返回普通整数列表[start,start + step,start + 2 * 步, ...]。如果step为正,则最后一个元素是最大的开始 + i *步骤少于停止;如果step为负数,则最后一个元素是最小的start + i * step大于stop。步骤不能为零 (或者引发ValueError)。