粒子運動程式設計的問題...

有一個粒子運動方向的程式碼函式(以 visual basic 語言為例)如下:

Sub Motion( x_pos As Integer, y_pos As Integer, radius As Integer,

degree As Integer)

x_pos=x_pos+ radius*cos(degree);

y_pos=y_pos+ radius*sin(degree);

End Sub

若考慮到要設計一個比較擬真的爆炸運動的效果,則上述函式應作何修改? (你也可以另外設計函式來搭配)。

請提出兩種以上方法,並試說明設計你的概念(請輔以繪圖說明你的執行效果)。

請問這題怎麼答比較好??

2 Answers

Rating
  • re
    Lv 4
    1 decade ago
    Favorite Answer

    做一個particle物件

    成員:

    初始位置、速度(含大小跟方向)、質量

    方法:

    nextT(t,g) '給短時間間隔跟重力更新particle資料

    draw(gra) '在graphics物件上面畫出particle

    Plus(p,dir) '給一個衝量改變particle狀態,方便物體爆炸時使用

    ps.我用的角度為rad

    =========程式碼========

    Public Class Particle

     Public x, y, theta, mass, v As Double '應該封裝成員,但為了方便暫時沒做

     Public Sub New(ByVal mass As Double, _

         ByVal x As Double, ByVal y As Double, _

        ByVal velocity As Double, ByVal theta As Double)

      Me.x = x

      Me.y = y

      Me.theta = theta

      Me.mass = mass

      v = velocity

     End Sub

     Public Sub nextT(ByVal t As Double, ByVal gravity As Double)

      Dim vx, vy As Double

      vx = v * Math.Cos(theta)

      vy = v * Math.Sin(theta)

      x = x + vx * t

      y = y + vy * t

      vy = vy - gravity * t

      v = Math.Sqrt(vx ^ 2 + vy ^ 2)

      If vx >= 0 Then

       theta = Math.Atan(vy / vx)

      Else

       theta = Math.Atan(vy / vx) + Math.PI

      End If

     End Sub

     Public Sub draw(ByVal gra As Graphics)

      Dim d As Double = mass ^ 0.33

      gra.FillEllipse(Brushes.Red, CType(x, Integer), CType(y, Integer), CType(d, Integer), CType(d, Integer))

     End Sub

     Public Sub Plus(ByVal P As Double, ByVal dir As Double)

      Dim dv As Double = P / mass

      Dim vx, vy As Double

      vx = v * Math.Cos(theta) + dv * Math.Cos(dir)

      vy = v * Math.Sin(theta) + dv * Math.Sin(dir)

      v = Math.Sqrt(vx ^ 2 + vy ^ 2)

      If vx >= 0 Then

       theta = Math.Atan(vy / vx)

      Else

       theta = Math.Atan(vy / vx) + Math.PI

      End If

     End Sub

    End Class

    2009-02-11 02:47:00 補充:

    這只是簡單的particle

    依照作用力跟反作用力

    當C爆炸後變成A跟B,可以如下流程

    1.創造A跟B物件,除了質量外,其他狀態由C複製

    (A跟B的質量總和=C的質量)

    2.利用Plus方法產生爆炸效果

    A.plus(p,dir)

    B.plus(p,dir+PI)

    (只要dir相差PI,p的大小相等,則此爆炸瞬間滿足動量守衡)

    3.刪除C物件

    2009-02-11 02:57:16 補充:

    至於爆炸成多質點:

    只要滿足衝量總和為0即可

    (注意,這邊指的是向量和)

    2009-02-12 13:07:37 補充:

    http://www.sendspace.com/file/xikidf

    稍微做了一下

    方便起見缺少滿多檢查的

    一開始輸入5個欄位

    然後按發射,在中途中按爆炸

    一次一顆就好…

    我用的數值

    仰角=1、初速=100、重力=20、爆炸能量=500000、碎片數量=2以上

    2009-02-12 13:08:41 補充:

    我是用vbsual basic 2005 express寫的

    2009-02-17 13:22:20 補充:

    沒關係啦

    我不在意的

    是剛好看到這題目有興趣玩玩

    Source(s): 高中物理
  • 1 decade ago

    對不起,來不及了,我本來想說還有三天,結果三天碰上567就出去了,對不起><,有沒有辦法直接選你阿~~

Still have questions? Get your answers by asking now.