The Nature of Code閱讀心得與Python實作:2.1 Forces and Newton's...

更新於 2024/07/22閱讀時間約 7 分鐘
這一節的標題是
2.1 Forces and Newton's Laws of Motion
因為方格子標題字數限制,所以沒完整顯現

根據牛頓的三大運動定律,力可以定義成

力是會導致有質量的物體加速的向量

這個關於力的定義的重點,就在於「向量」這兩個字。既然力是向量,那第一章介紹的關於向量的觀念,以及寫程式時用到的工具、技巧,都可以拿來使用。

接下來,就來看看牛頓的三大運動定律,以及程式寫法。

Newton's First Law

牛頓第一運動定律說的是:

物體不受力或合力為零時,靜者恆靜;動者恆做等速直線運動

也就是說,物體如果沒有受到力的作用,或者作用在身上的力都互相抵銷了,那它的速度和運動方向就不會改變。從這裡可以看出來,根據第一運動定律,物體有維持原運動狀態的傾向,所以第一運動定律又叫「慣性定律」。

根據第一運動定律,在模擬的時候,如果作用在物體的合力為零,那物體的速度向量就會維持不變。換句話說,除非是在合力不為零的情況下,否則Mover類別的update()方法中,是不應該用任何數學運算來改變velocity這個向量的。

Newton's Third Law

接下來,先來看第三運動定律,然後再回過頭來看第二運動定律。

第三運動定律說的是:

對於每一個作用力,都會有一個大小相同方向相反的反作用力

根據第三運動定律,當你推一堵牆的時候,會有一股大小相同的反作用力作用在你身上。不過,這並不是說這堵牆因為不爽被你推,所以主動回擊,也推你一把;第三運動定律真正的意思是,當你出力推那堵牆時,你的力量包含了作用力及反作用力這兩股成對的力量。

第三運動定律原先的敘述容易引起誤解,改用下面的敘述方式應該會比較好一些:

作用力和反作用力總是成雙成對的出現,它們的大小相同,但方向相反。

看到「大小相同方向相反」,可別以為成對出現的力會互相抵銷,導致合力為零;這裡要注意的是,作用力和反作用力,它們的作用對象不同,所以不會互相抵銷。當你推牆的時候,一股力是作用在牆上,另一股力則是作用在你身上。

雖然作用力和反作用力的大小相同,但這並不代表它們對兩個物體在運動方面的影響是一樣的。例如,把一顆球丟向牆壁。雖然作用在牆壁和球的力量相等,但牆壁不動如山,而球則反彈回來。作用力和反作用力究竟會對物體的運動造成怎樣的影響,還得考慮物體的質量、摩擦力等等其他的因素才能知道。

因為作用力和反作用力的大小相同而方向相反,所以在寫程式時,如果物體A作用在物體B的力量是f時,那反作用力,也就是物體B作用在物體A的力量,就會是-f。所以,如果是要模擬兩個物體間的萬有引力,當其中一個物體受到萬有引力f的作用時,另一個物體就會受到-f的作用力。

雖然作用力和反作用力總是同時出現,不過,畢竟我們只是利用自然界的物理定律來建造虛擬的世界,而不是真的要鉅細靡遺精準地重現真實世界,所以有時候我們並不會去管反作用力的部分。例如,當我們在模擬環境中的風時,就不會去管當風吹在物體上時,施加在空氣上的反作用力,畢竟我們要模擬的是風對物體所造成的影響,而不是去模擬空氣受力之後的反應。

Newton's Second Law

牛頓第二運動定律說的是

力等於質量乘上加速度

寫成數學式就是

F = ma

其中F是力;m是物體的質量;a是加速度。

從牛頓第二運動定律的數學式可以看出來,加速度和作用力成正比,而和物體的質量成反比。所以,如果去推一顆籃球,用的力量越大,球滾動的加速度會越大;如果用相同的力量去推一顆比籃球重得多的鉛球,那鉛球滾動的加速度,將會比籃球小得多。

在上面那段敘述中提到:當用相同的力量去推一顆比籃球重得多的鉛球時,由牛頓第二運動定律可以知道,籃球的加速度會比鉛球大。這其實是一般通俗不精確,把「重量(weight)」和「質量(mass)」當成同一件事的說法。「重量」和「質量」其實是兩種不同的物理量,在牛頓第二運動定律中用的是「質量」,而不是「重量」。

重量和質量是不同的物理量,那它們之間有什麼不一樣呢?簡單來說,質量是用來衡量物體含有多少物質的量,單位是公斤(kg);而重量則是重力作用在物體上的力量,是一種力,單位是牛頓(N)。由牛頓第二運動定律,物體的重量w,等於物體的質量m,乘上重力加速度g,也就是

w = mg

在地球上,1公斤質量的物體,其重量也稱為1公斤重,記為1 kgw。因此,當一般在說某個東西有多重時,因為我們就在地球上,所以不管是把它理解為指的是重量或質量,並不會有什麼不同。然而,如果不是在地球上,那同一個物體的質量和重量,就不見得會一樣。一個物體的質量不會因地點不同而不同,但在不同的地點,因為重力不同的關係,重量可能會不一樣。例如,具一公斤質量的物體,不管是在地球還是月球,質量都是一公斤;但是在月球上,因為重力只有地球的六分之一,所以這個物體的重量,只有在地球時的六分之一。

前面提到質量在真實世界中的定義,那在模擬的世界中,質量是什麼呢?寫程式的時候,又該如何處理質量這個物理量呢?在這節中,我們先把問題簡化,假設在模擬世界中,所有物體的質量都是1,然後在之後的小節中再來看看,物體的質量不是1時該怎麼辦。

因為質量是1,所以由牛頓第二運動定律

a = F / m = F / 1 = F

也就是說,經過簡化之後的模擬世界,物體的加速度和施加於其上的力是相等的。

在第一章中,我們知道了物體的加速度、速度、位置間的關係,也就是

velocity += acceleration
position += velocity

現在再加上作用力和加速度間的關係,也就是

acceleration = force

所以,力可以說是讓物體得以運動的源頭。

既然物體的加速度和施加於其上的力是相等的,我們可以在Mover這個類別加入一個apply_force()方法,用來施加力量給物件。例如

mover.apply_force(wind)
mover.apply_force(gravity)

這裡的windgravity都是pygame.Vector2物件。這個施加力量給物件的方法,實作如下:

def apply_force(self, force):
self.acceleration = force

這樣子所實作出來的apply_force(),看起來挺不賴的,但卻會有個大問題。假設現在有windgravity兩股力量同時作用在mover這個Mover類別的物件上,程式很自然會這樣寫

mover.apply_force(wind)
mover.apply_force(gravity)
mover.update()
mover.show()

前兩二行程式所做的事情,就相當於是

mover.acceleration = wind
mover.acceleration = gravity

我們原本是希望windgravity同時都作用在mover上,但很不幸的,這樣子寫,最後卻只有gravity會作用在mover上;這是因為,本來一開始有作用的wind,在後來被gravity給取代掉了。

很顯然的,上述的寫法,沒辦法處理有許多個力同時作用的情況。那該怎麼辦呢?下一節見分曉。



avatar-img
15會員
130內容數
寫點東西自娛娛人
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ysf的沙龍 的其他內容
這一章介紹的是力(force),以及力與加速度間的關係。
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
介紹如何在模擬物體運動時,引入加速度這個物理量。
介紹pygame支援的向量運算,以及向量的減法、乘法、除法實際上是怎麼計算的。
這一章介紹的是力(force),以及力與加速度間的關係。
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
介紹如何在模擬物體運動時,引入加速度這個物理量。
介紹pygame支援的向量運算,以及向量的減法、乘法、除法實際上是怎麼計算的。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
As we navigate through 2024, the mobile app development landscape continues to evolve, driven by changing consumer behaviors...
Thumbnail
"You live for yourselves, not for humans." About trees and their feelings of sadness due to human interference.
Now I understand: there is no need for futile treatment or ineffective care, allowing our mother nature to take over may be the kindest approach for t
Thumbnail
  簡直像站在球場中看著真實的比賽讓人目不轉睛,呼吸為之屏息——傳說中灌籃高手動畫版的遺珠之憾:湘北對山王之戰終於出世。當年所有人期盼卻沒盼得的最重要的一場比賽,在生父手下脫胎而出,讓這部作品畫下奇蹟的句點。  
Thumbnail
《The Writer And Her Story》是香港漫畫家智海在1999年的作品,黑白色調的漫畫,描寫一個抑鬱的作者,被自己腦袋裡沉重的想法壓駝了背,寫下作品想為腦袋「減重」,卻被各種瑣碎問題所困,就連繪者也彷彿以上帝之手,延伸再延伸,給他沒有盡頭的樓梯和前路...
Thumbnail
在海上看美景,也不忘笑話別人的英語口音👉「It's gorgis, ain't it?」一起來領略一世紀前馬克•吐溫的不倒幽默!
Thumbnail
英文有一些慣用的句子,字面上怎麼讀都參不透,因為不知道背後隱含的思考邏輯。「給他懷疑的好處(give him the benefit of the doubt)」這種話在中文的邏輯中根本不成文也說不通,到底是在講什麼鬼?你只能用外國人的邏輯來想!
Thumbnail
《Queen’s Gambit》第一眼看會以為又是另一個關於天才兒童戰無不勝或者自甘墮落的故事。其實這一套劇集,講的是一個高敏感又內向的女生,如何在女權崛起之前的冷戰年代,以人生輸家之姿,晉身頂級棋手的故事,同時講述一個女孩子的前半生。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
As we navigate through 2024, the mobile app development landscape continues to evolve, driven by changing consumer behaviors...
Thumbnail
"You live for yourselves, not for humans." About trees and their feelings of sadness due to human interference.
Now I understand: there is no need for futile treatment or ineffective care, allowing our mother nature to take over may be the kindest approach for t
Thumbnail
  簡直像站在球場中看著真實的比賽讓人目不轉睛,呼吸為之屏息——傳說中灌籃高手動畫版的遺珠之憾:湘北對山王之戰終於出世。當年所有人期盼卻沒盼得的最重要的一場比賽,在生父手下脫胎而出,讓這部作品畫下奇蹟的句點。  
Thumbnail
《The Writer And Her Story》是香港漫畫家智海在1999年的作品,黑白色調的漫畫,描寫一個抑鬱的作者,被自己腦袋裡沉重的想法壓駝了背,寫下作品想為腦袋「減重」,卻被各種瑣碎問題所困,就連繪者也彷彿以上帝之手,延伸再延伸,給他沒有盡頭的樓梯和前路...
Thumbnail
在海上看美景,也不忘笑話別人的英語口音👉「It's gorgis, ain't it?」一起來領略一世紀前馬克•吐溫的不倒幽默!
Thumbnail
英文有一些慣用的句子,字面上怎麼讀都參不透,因為不知道背後隱含的思考邏輯。「給他懷疑的好處(give him the benefit of the doubt)」這種話在中文的邏輯中根本不成文也說不通,到底是在講什麼鬼?你只能用外國人的邏輯來想!
Thumbnail
《Queen’s Gambit》第一眼看會以為又是另一個關於天才兒童戰無不勝或者自甘墮落的故事。其實這一套劇集,講的是一個高敏感又內向的女生,如何在女權崛起之前的冷戰年代,以人生輸家之姿,晉身頂級棋手的故事,同時講述一個女孩子的前半生。