2013-02-05 92 views
1

我正在創建一個程序來查找以給定速度發射子彈的最佳角度,以便在給定距離處擊中目標。VPython:迭代函數來創建每次運行的新曲線

我有這樣的代碼:

def Trajectory(angle): 
    position = vector(0,0,0) 
    poscurve.plot(pos=position) 
    velocity = v0 * vector(cos(angle*pi/180), sin(angle*pi/180), 0) 
    while (position.y > 0) or (velocity.y > 0): 
     dx = velocity * dt # update dx and dv 
     dv = g * dt 

     position = position + dx # apply the updates to velocity and position 
     velocity = velocity + dv 

     poscurve.plot(pos=position) 
    return position 

的問題是,這種方案多次重複這個功能,具有不同的角度。重複它時,它會將新曲線的第一個點連接到上一個曲線的最後一個點,因爲該函數每次都使用相同的poscurve.plot(pos=position)。每次迭代此函數時,如何讓該函數生成一條新曲線?

(有此代碼段之外定義的變量,該方案在概念上正常工作,該圖只是外觀)

+1

目前還不清楚「poscurve」來自哪裏。從我所能看到的,它只是給數據集添加了一個新點(稍後繪製)。要創建每條新曲線,您可以創建一個新的「poscurve」對象,或者保留一個「poscurve」列表,或者添加一條新的曲線/線到現有的圖形/場景 – Oerd

+0

@很抱歉,'poscurve '定義爲'poscurve = gcurve(gdisplay = win,color = color.blue)',問題是我不知道如何每次創建一個新的'gcurve',甚至可以運行相同的函數並且每次都使用不同的變量作爲軌跡? – user2043909

回答

0

添加poscurve作爲參數:

def Trajectory(angle,poscurve): 
    position = vector(0,0,0) 
    poscurve.plot(pos=position) 
    velocity = v0 * vector(cos(angle*pi/180), sin(angle*pi/180), 0) 
    while (position.y > 0) or (velocity.y > 0): 
     dx = velocity * dt # update dx and dv 
     dv = g * dt 

     position = position + dx # apply the updates to velocity and position 
     velocity = velocity + dv 

     poscurve.plot(pos=position) 
    return position 

然後,通過在新每次都有poscurve。您可以再次撥打gcurve創建一個新對象。

相關問題