2015-08-09 40 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