1. 程式人生 > >python通過面向物件程式設計方法 實現鉛球執行軌跡的計算

python通過面向物件程式設計方法 實現鉛球執行軌跡的計算

本文我們通過面向物件程式設計的方法,實現鉛球執行軌跡計算的程式。
這個問題中有一個鉛球物件,它有4個屬性:xpos,ypos,xvel,yvel

構建投射體的類Projectile用來生成鉛球物件,不斷的更新物件變數,以此來描述這個問題。

用python3編寫Projectile.py檔案和main_qianqiu.py檔案。

Projectile.py檔案如下:

from math import sin,cos,radians
class Projectile:
    def __init__(self,angle,velocity,height):
        #根據給定的發射角度,初始速度和位置建立一個投射體物件
        self.xpos=0.0
        self.ypos=height
        theta=radians(angle)
        self.xvel=velocity*cos(theta)
        self.yvel=velocity*sin(theta)


    def update(self,time):
        #更新投射體的狀態
        self.xpos=self.xpos+time*self.xvel
        yvel1=self.yvel-9.8*time
        self.ypos=self.ypos+time*(self.yvel+yvel1)/2.0
        self.yvel=yvel1


    def getY(self):
        #返回投射體的y軸座標
        return self.ypos


    def getX(self):
        #返回投射體的x軸座標(即水平距離)
        return self.xpos

找到python的安裝目錄,將Projectile.py檔案放到資料夾python35/Lib中,如下圖:


main_qianqiu.py檔案內容如下:

from Projectile import *


def getInputs():
    a=eval(input('Enter the launch angle(in degrees):'))
    v=eval(input('Enter the initial velocity(in meters/sec):'))
    h=eval(input('Enter the initial height(in meters):'))
    t=eval(input('Enter the time interval:'))
    return a,v,h,t


def main():
    angle,vel,h0,time=getInputs()
    shot=Projectile(angle,vel,h0)
    while shot.getY()>=0:
        shot.update(time)
    print('\nDistance traveled:{0:0.1f} meters.'.format(shot.getX()))


if __name__=='__main__':
    main()

執行main_qianqiu.py檔案,輸入輸出如下:


(完)