2015-08-09 59 views
0

有人能告诉我为什么高度的结果总是0.00m/-0.00m?Python土豆炮

我做错了什么?

import math 

g = 9.8 
v = 60 

angle = float(input("Angle: ")) 

def distance(v, angle, g): 

    angle2 = angle * 2 
    d = v**2 * math.sin(math.radians(angle2))/g 
    return d 

distance = distance(v, angle, g) 

def time(distance, v, angle): 

    t = distance/(v * math.cos(math.radians(angle))) 
    return t 

time = time(distance, v, angle) 

def height(v, angle, time, g): 

    h = v * math.sin(math.radians(angle)) * time - g * time**2/2 
    return h 

height = height(v, angle, time, g) 

print("""Time: {0:.2f}s 
Distance: {1:.2f}m 
Height: {2:.2f}m""" .format(time, distance, height)) 
+0

这是Python 2还是Python 3? –

+0

这是用于Python 3 – rabbit

+0

你想具体计算什么?您的距离是在轨迹期间行驶的全部距离,正如@Ewan所指出的那样,在两种可能的解决方案中,t = 0,h = 0或t = X,h = 0时,您的高度始终为零(在D =距离)。你想要这个,或者你想要的高峰,轨迹的飞行时间和范围? – jonnybazookatone

回答

-2

尝试添加这些括号:

h = v * math.sin(math.radians(angle)) * (time - g) * time**2/2 
+1

解释为什么这些括号有所作为会有所帮助。 –

+0

太棒了!我认为它现在有效。谢谢:D – rabbit

+5

'(时间 - 克)'是什么样的数量? –

1

你计算炮弹的高度(或不管它是什么),在它返回到地面的时间。这总是零。

你想通过time/2进入高度计算(因为你忽略空气阻力在这里)。

+0

第一部分是对的,但我不明白你的第二点。首先,空气阻力是速度依赖的(通常),并且是方程中的一个额外项。如果你忽略空气阻力,那么它就不包含在方程中。高度仍然是-1/2at^2。你能详细说说你的想法吗? – jonnybazookatone

+0

@jonnybazookatone在H与T的图上,路径是向下指向的抛物线。在T = 0和T =时间,我们知道H = 0。 – Paul

+0

@Paul。是的,这就是我理解第一点的原因。我问他为什么要修改方程为'时间/ 2',它应该保持'g *时间^ 2/2'。为什么有提到空气阻力?在目前的情况下,没有解释就没有意义。另外你在哪里得到指示,你可以自己指定角度? – jonnybazookatone