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會員
142內容數
寫點東西自娛娛人
ysf的沙龍的其他內容
2024/07/16
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
2024/07/16
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
2024/07/15
介紹如何在模擬物體運動時,引入加速度這個物理量。
2024/07/15
介紹如何在模擬物體運動時,引入加速度這個物理量。
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
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 微積分的記法  二 前面說過,牛頓關心的不是抽象的數學問題,他要解決的是天體運動的問題。他知道,假如他擁有該天體在任何一刻的瞬速數據,他便能夠從質量
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News