我正在寫一個小遊戲,上面是一些滑動物體的視圖,比如冰壺或沙狐球。 (我碰巧在物理上使用PyMunk,但是因爲這個問題一般是關於物理模擬的,所以不要擔心語言的細節問題。) 在我開始調整我的小sim的所有值之前, '對,我想我最好檢查一下,確保我至少能夠模擬正確的速度曲線。然而,找到明確的答案已經變得比預期的難得多。什麼類型的速度隨時間變化曲線模擬物體在水平面上停止滑動?
模型A
要模擬的對象滑動停止,pymunk允許程序員設置space.damping
的方式,其工作原理是這樣(從API參考引用):「0.9手段的值,它每個身體每秒會失去10%的速度。「
這是有道理的,但似乎會產生與此基本形狀的速度 - 時間曲線(不去管確切的數字):
|*
v |
e |
l | *
o |
c | *
i | *
t | *****
y | ****************
---------------------------*----
time
換句話說,加速度隨着時間的推移而降低。 (有些人可能更喜歡說「減速」或「內在加速度」減小,但在最純粹的物理意義上,速度的任何變化都是'加速度',而在上面的圖表中速度的變化隨時間變小。)因爲這樣一條曲線將接近但從未穿過0,採用一個臨界值,在該臨界值之下,身體的速度被迫爲0.Pymunk也提供了截止點的設置:space.idle_speed_threshold
。
這似乎很簡單,但當我在我的小模擬中嘗試過時,結果相當不令人滿意。所以,我開始考慮下面的模型B.
B型
關於它的直覺思維,好像加速度會隨時間而增加,使得這樣的曲線:
|********
v | ******
e | ****
l | ***
o | ***
c | **
i | **
t | *
y | *
--------------------------------
time
如果我想跨級表推一本書它似乎首先保持了它的大部分速度,但隨後很快就停止了(可能是因爲摩擦會導致減速速度的增加?儘管這裏的「爲什麼」並不重要)。 如果僅僅因爲沒有內置的方法,這在pymunk中實現起來有點難,但可以完成。 這並不是說我不信任花栗鼠/ pymunk開發者,但我不確定他們是否意味着阻尼來模擬我試圖模擬的東西。
所以,我的問題不是如何在代碼中實現這些曲線中的任何一個,而是 - 哪種類型的曲線準確地建模一個對象在水平面上停止滑動?
你可能會想「爲什麼這個人在編程網站上問一個物理問題?」,但是在查看過去四個小時的物理網站並且無處可去之後,我的希望是,因爲物理建模足夠普遍在編程這些日子裏,SO社區中的某個人可能對此有所瞭解,他們可以隨時分享。
我知道這種討論對SO:how to calculate a negative acceleration? 其中兩種類型的曲線是建議,但同時提問者得到了他的問題回答(有人幫他實現模型-B型曲線),社區沒有達成一個關於哪個更「物理上準確」的共識。 (我還借了提問者的ASCII藝術的圖表之一 - 謝謝。)
我也知道從pymunk陳列櫃卡羅姆板模擬這個例子: https://github.com/samiranrl/Carrom_rl 這也採用了內置阻尼(上面的模型A)。它似乎爲他們的目的正常工作。但可能是我們的人類觀察者不會注意到模型A是不正確的,因爲這些模型片段很長時間沒有運動。模型A在我的模擬中嘗試過時看起來不對,但後來我嘗試了更長時間的慢鏡頭,所以也許它在那裏更加引人注目。或者,對我而言,「看起來」是正確的(模型B)並不是正確的。任何想法都表示讚賞。謝謝!
謝謝!我並沒有預料到預期的實施將會受到限制,所以我會仔細研究tank.c,以瞭解你是如何在那裏做到的。感謝您的幫助和鏈接。 –