使用向量來處理問題有很多好處,其中一個好處,就是可以減少變數的數量。接下來,就用一個簡單的例子來介紹,使用向量跟不使用向量,對變數的數量會有什麼樣的影響。這個例子是模擬一個跑來跑去,碰到邊界會回彈的球,我們先看看不使用向量的寫法,然後再來看看變數的數量在使用向量來寫時,會怎樣減少。
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)
在程式中,描述這個球的變數有
位置:x
、y
速度:xspeed
、yspeed
很顯然的,每一個性質都需要兩個變數來描述,因為現在模擬的是二維的世界;推而廣之,如果模擬的是三維的世界,每一個性質,都需要三個變數來描述,也就是
位置:x
、y
、z
速度:xspeed
、yspeed
、zspeed
如果改用向量來寫,不管是二維或三維的世界,描述位置和速度這兩個性質的變數,都可以改成
位置:position
速度:speed
這裡的position
和speed
都是向量。所以,使用向量來寫,不管是二維或三維,只用一個向量變數,就足以描述一個性質,變數的數量因而減少,而且也不會隨維度的增加而增加。