※ 引述《F23ko (純潔)》之銘言:
: 就是高中物理常算的題目
: 可是要寫成程式....
: 覺得好難 orz....
: 二為彈性碰撞的解法很簡單
: 就只要把兩物體的速度,對中心點連線以及垂直方向做投影
: 然後把中心點連線上的投影互相交換,就是答案了
: 我在高中就這樣算,也沒覺得特別難或是複雜.....
: 但是要寫成程式碼就覺得很困難.....
這是因為你是用解題的想法來寫程式.
這碰撞問題我會這樣解.
已知每個畫格(frame)兩物件的位置與速度.
兩物體碰撞之時.(碰撞很簡單就每個畫格檢查兩物體距離)
兩物體連線即為你要的投影向量(垂直就是碰撞面).
然後再依照速度與碰撞面.各算出反彈的速度.完畢.
一個物理基底類別(群)在引擎中是必要的.
光一個Vec3就可以玩到十幾二十個member function
更不用說Line , Plane , Box.
說實話很有趣.而且算離散幾何有很多撇步.
但是我已經不建議各位再打造自己的物理基底
(我比較喜歡叫這是 Geometry Primitive )
有興趣就直接參考OGRE的Vector3
http://www.ogre3d.org/docs/api/html/classOgre_1_1Vector3.html
算是很好用的一個類別了.
延伸思考
. 想一下 Point Vector Line Ray Segment 有什麼不一樣?
. 承上題互相之間怎麼算碰撞?
--
"May the Balance be with U"(願平衡與你同在)
視窗介面遊戲設計教學,討論,分享。歡迎來信。
視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework)
遊戲工具設計(Game App. Tool Design )
電腦圖學架構及研究(Computer Graphics)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.167.136.93