The Nature of Code閱讀心得與Python實作:1.1 The Point of Vectors

更新於 發佈於 閱讀時間約 3 分鐘

使用向量來處理問題有很多好處,其中一個好處,就是可以減少變數的數量。接下來,就用一個簡單的例子來介紹,使用向量跟不使用向量,對變數的數量會有什麼樣的影響。這個例子是模擬一個跑來跑去,碰到邊界會回彈的球,我們先看看不使用向量的寫法,然後再來看看變數的數量在使用向量來寫時,會怎樣減少。

Example 1.1: Bouncing Ball with No Vectors

# python version 3.10.9
import sys

import pygame # version 2.3.0


pygame.init()

pygame.display.set_caption("Example 1.1: Bouncing Ball with No Vectors")

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

RADIUS = 24 # 球的半徑

screen_size = WIDTH, HEIGHT = 640, 360
screen = pygame.display.set_mode(screen_size)

FPS = 60
frame_rate = pygame.time.Clock()

x, y = 100, 100
xspeed, yspeed = 2.5, 2

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

screen.fill(WHITE)

# 依據球的速度計算球的位置來移動球
x += xspeed
y += yspeed

# 檢查是不是碰到左、右邊界回彈
if (x > WIDTH) or (x < 0):
xspeed = -xspeed

# 檢查是不是碰到上、下邊界回彈
if (y > HEIGHT) or (y < 0):
yspeed = -yspeed

# 在位置(x, y)顯示球
pygame.draw.circle(screen, BLACK, (x, y), RADIUS)

pygame.display.update()
frame_rate.tick(FPS)


在程式中,描述這個球的變數有

位置:xy
速度:xspeedyspeed

很顯然的,每一個性質都需要兩個變數來描述,因為現在模擬的是二維的世界;推而廣之,如果模擬的是三維的世界,每一個性質,都需要三個變數來描述,也就是

位置:xyz   
速度:xspeedyspeedzspeed

如果改用向量來寫,不管是二維或三維的世界,描述位置和速度這兩個性質的變數,都可以改成

位置:position   
速度:speed

這裡的positionspeed都是向量。所以,使用向量來寫,不管是二維或三維,只用一個向量變數,就足以描述一個性質,變數的數量因而減少,而且也不會隨維度的增加而增加。

留言
avatar-img
留言分享你的想法!
avatar-img
ysf的沙龍
15會員
141內容數
寫點東西自娛娛人
ysf的沙龍的其他內容
2024/07/16
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
2024/07/16
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
2024/07/15
介紹如何在模擬物體運動時,引入加速度這個物理量。
2024/07/15
介紹如何在模擬物體運動時,引入加速度這個物理量。
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
模擬世界是我們寫程式造出來的,我們就是模擬世界的主宰,所以各種作用力要長什麼樣子、要怎麼個作用法,都由我們決定。不過,如果希望這些作用力看起來像真實世界的作用力一樣,那在寫程式的時候,套用這些作用力在真實世界中的物理公式,會是比較省時省力的做法。
Thumbnail
模擬世界是我們寫程式造出來的,我們就是模擬世界的主宰,所以各種作用力要長什麼樣子、要怎麼個作用法,都由我們決定。不過,如果希望這些作用力看起來像真實世界的作用力一樣,那在寫程式的時候,套用這些作用力在真實世界中的物理公式,會是比較省時省力的做法。
Thumbnail
這一節談的是向量的定義,以及如何運用向量來建立模擬物體運動時,關於位置和速度間的關係式。
Thumbnail
這一節談的是向量的定義,以及如何運用向量來建立模擬物體運動時,關於位置和速度間的關係式。
Thumbnail
1.0 從函數到函算語法 1.2 函數概念小史 1.2.1 中譯的來源 1.2.2 一個速度問題 1.2.3 幾何的方法 1.2.4 微積分的記法 1.2.5 弦的振動 五 特朗貝爾依循當時數學界對函數的普遍理解,視「函數」為任一分析式。 但這時的歐拉宣稱函數不必是正常意義下的
Thumbnail
1.0 從函數到函算語法 1.2 函數概念小史 1.2.1 中譯的來源 1.2.2 一個速度問題 1.2.3 幾何的方法 1.2.4 微積分的記法 1.2.5 弦的振動 五 特朗貝爾依循當時數學界對函數的普遍理解,視「函數」為任一分析式。 但這時的歐拉宣稱函數不必是正常意義下的
Thumbnail
這一節的標題是A Smoother Approach with Perlin Noise,介紹由Ken Perlin所開發的Perlin noise,及其應用方式。
Thumbnail
這一節的標題是A Smoother Approach with Perlin Noise,介紹由Ken Perlin所開發的Perlin noise,及其應用方式。
Thumbnail
1.0 從函數到函算語法 1.2 函數概念小史 1.2.1 中譯的來源 1.2.2 一個速度問題 1.2.3 幾何的方法 1.2.4 微積分的記法  二 前面說過,牛頓關心的不是抽象的數學問題,他要解決的是天體運動的問題。他知道,假如他擁有該天體在任何一刻的瞬速數據,他便能夠從質量
Thumbnail
1.0 從函數到函算語法 1.2 函數概念小史 1.2.1 中譯的來源 1.2.2 一個速度問題 1.2.3 幾何的方法 1.2.4 微積分的記法  二 前面說過,牛頓關心的不是抽象的數學問題,他要解決的是天體運動的問題。他知道,假如他擁有該天體在任何一刻的瞬速數據,他便能夠從質量
Thumbnail
直觀理解 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率。 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少) 應用 導數:在物理學中應用廣泛,例如描述速度和加速度。 偏導數:在多變量分析、優
Thumbnail
直觀理解 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率。 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少) 應用 導數:在物理學中應用廣泛,例如描述速度和加速度。 偏導數:在多變量分析、優
Thumbnail
行進中的球,因表面形狀相對速度方向不對稱,產生了不對稱的邊界層分離,以及使球不同位置受到的空氣作用力大小不同,最終導致空氣作用力的合力,出現「垂直速度方向的分力(f)」。 這個分力 f,源於表面形狀 s 的不對稱,而球若有旋轉,則每個時刻的 f 都可能會變化。 既然如此,那不如擴充表面形狀(s)
Thumbnail
行進中的球,因表面形狀相對速度方向不對稱,產生了不對稱的邊界層分離,以及使球不同位置受到的空氣作用力大小不同,最終導致空氣作用力的合力,出現「垂直速度方向的分力(f)」。 這個分力 f,源於表面形狀 s 的不對稱,而球若有旋轉,則每個時刻的 f 都可能會變化。 既然如此,那不如擴充表面形狀(s)
Thumbnail
曾經對一個數學不好,但是喜歡玩電玩的親友小孩說,你現在討厭的正數,負數的代數計算,就是電玩裡頭的人物,可以左右上下移動,發射子彈,跳躍的基礎。 我舉微軟c語言寫遊戲的例子,(+,0)是向右,(-,0)是向左,(0,+)是向上,(0,-)是向下,(0,+)是向上,而跳躍旋轉則是三角函
Thumbnail
曾經對一個數學不好,但是喜歡玩電玩的親友小孩說,你現在討厭的正數,負數的代數計算,就是電玩裡頭的人物,可以左右上下移動,發射子彈,跳躍的基礎。 我舉微軟c語言寫遊戲的例子,(+,0)是向右,(-,0)是向左,(0,+)是向上,(0,-)是向下,(0,+)是向上,而跳躍旋轉則是三角函
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News