更新於 2024/06/20閱讀時間約 3 分鐘

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

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

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都是向量。所以,使用向量來寫,不管是二維或三維,只用一個向量變數,就足以描述一個性質,變數的數量因而減少,而且也不會隨維度的增加而增加。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.