KHOA HC CÔNG NGH
TP CHÍ KHOA HC & CÔNG NGH . S 26 - 2021 1
CHUYỂN ĐỘNG QUAY TRONG KHÔNG GIAN
VI NG DNG TRONG LP TRÌNH VIDEO GAME
ROTATION IN SPACE WITH APPLICATIONS IN VIDEO GAMES
Nguyn Mai Quyên1, Chu Bình Minh2, Hà Bình Minh3
1Khoa Toán kinh tế, Trường Đại hc Kinh tế quc dân
2Khoa Khoa hc cơ bản, Trường Đại hc Kinh tế - K thut Công nghip
3Khoa H thng thông tin qun lý, Trường Đại hc Ngân hàng Thành ph H Chí Minh
Đến Tòa son ngày 19/03/2020, chp nhn đăng ngày 09/04/2020
Tóm tt:
Chuyển động quay là một trong những chuyển động phức tạp trong các video game. Bài báo sẽ
giải thích việc sử dụng ma trận để tạo nên chuyển động quay, từ khái niệm toán học cơ bản cho
đến ví dụ cụ thể.
T khóa:
Phép quay, video games.
Abstract:
Rotation is one of the most sophisticated movements in video games. In this paper we will explain
from abstract concepts to concrete example that how matrix theory is used in rotations.
Keywords:
Rotation, video games.
1. ĐẶT VẤN ĐỀ
Tchơi đin t (game) ngày càng đa dạng,
ph biến, đem lại nhiu ích lợi cũng như
tri nghiệm cho người chơi. Nhiều trò chơi
được thiết kế vi mục đích giáo dục, giúp cho
tr em hc ngôn ng lp trình, học phương
pháp duy, học cách gii quyết vấn đề,
chng hn như Scrach (do MIT Media Lab
phát trin), Minecraft (do Mojang phát trin),
Roblox (do Roblox Corporationc phát
triển),…
Trong lch s phát triển tchơi điện tử, đáng
chú ý s phát trin ca các video game vào
những năm cuối những năm 1990 [1]. Các
video game mô phng nhng hình nh 3 chiu,
mang lại cho người chơi những tri nghim
gn vi thc tế. Dưới góc nhìn ca nhng
chuyên gia lp trình game, phía sau nhng
hình nh 3 chiu trong game s tng hp
ca rt nhiu nhng k thut tiên tiến v đồ
ha y tính, toán hc, vt lý hc, công ngh
mô phng, k thut lp trình,… (xem [1], [2]).
Hình 1. Mt hình nh 3 chiu trong game Minecraft
(thiết kế bi Hà Tu Minh teky_00042)
Mt trong nhng công c toán học được s
dng rng rãi trong vic lp trình phát trin
các video game là lý thuyết ma trn (xem [1, 2,
5]). Vic hiu các công thc toán học, đặc
bit v ma trn, rt cn thiết đối vi nhng
chuyên gia lp trình game. Nhng công c phát
trin video game đòi hỏi lp trình viên phi
hiu biết sâu sc v ma trận, như OpenGL (do
Khronos Group phát trin), WebGL (do
Khronos WebGL Working Group phát trin),
KHOA HC - CÔNG NGH
2 TP CHÍ KHOA HC & CÔNG NGH . S 26 - 2021
DirectX (do Microsoft phát trin),...
Các đối tượng trong video game (như không
gian, bản đồ, vt th, nhân vật, khí…) đều
là những đối tượng o mô phng li thế gii 3
chiu trong thc tế (xem [1]). Những đối
ợng này trong game cũng sự chuyn
động, biến đối, ging hệt như trong thực tế.
Đằng sau vic phng s chuyển động ca
các đối tượng trong video game đó là mt quá
trình tính toán của y tính, đặc bit vic
s dng ma trn trong qtrình tính toán y.
Bài báo này s gii thích c th v vic s
dng ma trận để to mt trong nhng chuyn
động phc tp trong video game, đó là chuyn
động quay. Bài báo s trình bày t nhng khái
nim toán hc cơ bản cho đến ví d c th.
Cu trúc của bài báo được trình bày như sau:
Phn 2 s gii thiu v ma trn trc giao
vai trò ca nó trong video game. Phn 3 s
t các công thc toán hc ca chuyn động
quay trong không gian. Phn 4 s t mt
ng dng c th. Cui cùng kết lun s
được đưa ra trong Phần 5.
2. MA TRẬN TRỰC GIAO
2.1. Ma trận trực giao 3×3 và tính chất
Ma trận được s dng trong rt nhiu chuyn
động trong các video game, như chuyển động
bản (trước sau, trên dưới, trái phi, quay),
chuyển động phc hp (là kết hp chuyn
động bản). Trong đó, chuyển động quay
mt trong nhng chuyển động khó cần đến
nhiu tính toán phc tạp đ phng loi
chuyển động y. Ma trận để tính toán nhng
chuyển động quay y ma trn trc giao,
được định nghĩa như sau:
Định nghĩa. Ma trn A c 3×3 được gi là ma
trn trc giao (hay còn gi ma trn quay)
nếu
1T
AA
.
Tính cht ca ma trn trc giao:
Định thc ca A bng 1 hoc 1.
Các vectơ cột ca ma trn A sở trc
chun ca
3
.
Ma trn A mt giá tr riêng bng 1.
Vector riêng ca A ng vi giá tr riêng bng 1
chính là trc quay ca ma trn A.
2.2. Vai trò của ma trận trực giao trong
video game
Vic s dng ma trn trong các video game,
đặc bit trong nhng chuyển động phc tp
như chuyển động quay, những ưu điểm sau
(xem [1]).
Ưu điểm:
Tính góc xoay d dàng. Lý do là các phn t
ca ma trn mi liên h vi các góc xoay
thông qua các hàm ng giác. Đây ưu điểm
không biu din nào khác th thc hin
được.
Định dạng đồ ha API (Application
Programming Interface) định dng để giao
tiếp vi phn cng chuyên v đồ hoạ. Định
dng y s dng ma trận để định hướng, tính
toán.
Tính góc gia các đối tượng d dàng. Lý do
là các thông tin v góc xoay được cho trong ma
trn, nên khi ta biết góc gia đối tượng A so
với đối tượng B và góc giữa đối tượng B so vi
đối tượng C thì ta có th d dàng xác định được
góc ca A so vi C.
Tính ma trn nghch đảo d dàng. Điu y
th thc hin d dàng do ma trn quay
trn trc giao nên ma trn nghịch đảo ma
trn chuyn v.
Tuy nhiên, mt ma trn trc giao 3×3 cần đến
9 phn t để lưu trữ, mc theo lý thuyết ch
cn s dng 3 tham s đủ để biu din mt
ma trn trc giao. Cách biu din này ca ma
trn có mt s hn chế như sau (xem [1]).
Hn chế:
V b nh. Chng hn, ta xét một đon phim
hot hình mt nhân vt trong khung hình.
Mi hoạt động ca nhân vt này s kết hp
ca 20 phần cơ thể. Trong mt khung hình, mi
phần thể được xác định s chuyển động
KHOA HC CÔNG NGH
TP CHÍ KHOA HC & CÔNG NGH . S 26 - 2021 3
bng một hướng được biu din bng mt
ma trận quay. Để cho nhân vt chuyển động
thì ta cn ti thiu 15 khung hình trong 1
giây. Tc là, ta cần lưu tr 300 ma trn trc
giao cho mi giây. Mc vy, vấn đề y
không quá nghiêm trng do k thuật lưu trữ
d liệu ngày càng đưc nâng cp v mt dung
ng và tốc độ.
Không d hình dung. Biu din phép quay
bng ma trn không d hình dung đi vi
nhng lp trình viên mi vào ngh. V mt t
nhiên, con người luôn thiên hướng định
hướng theo các góc quay hơn theo các ma
trn.
Nhiu phương trình toán hc biu din ma
trn. Mt ma trn quay gm 9 phn t
nhưng chỉ ph thuc vào 3 tham s, nên
nhiu cách biu din ma trn khác nhau,
th gây ra đôi chút lúng túng cho nhng lp
trình viên chưa có kinh nghiệm.
3. PHÉP QUAY TRONG KHÔNG GIAN
3.1. Các phép quay cơ bản và góc Euler
Ba phép quay bản quanh các trc tọa độ
Ox, Oy, Oz cùng với ba góc Euler tương ng
được định nghĩa như sau (xem [3, 5]):
Phép quay quanh trc Ox: Nếu ta gi
nguyên trc Ox quay mt phng Oyz
quanh trc Ox mt góc , ta thu được h trc
tọa độ 3 chiu mi Oxy’z’ như trong hình 2.
Góc đưc gi góc roll. Ma trận tương
ng vi phép quay này là:
1 0 0
0 cos sin
0 sin cos
x
R ( )







(1)
Hình 2. Phép quay quanh trc Ox mt góc : Gi
nguyên trc Ox và quay mt phng Oyz quanh trc
Ox mt góc
Phép quay quanh trc Oy: Tương tự như
góc , nếu ta gi nguyên trc Oy quay mt
phng Oxz quanh trc Oy mt góc , ta thu
được h trc tọa độ 3 chiu mi Ox’yz’. Góc
được gi góc pitch. Ma trận tương ng vi
phép quay này là:
cos 0 sin
0 1 0
sin 0 cos
y
R ( )







(2)
Phép quay quanh trc Oz: Nếu ta gi
nguyên trc Oz quay mt phng Oxy quanh
trc Oz mt góc , ta thu đưc h trc tọa độ 3
chiu mi Ox’y’z. Góc được gi góc yaw.
Ma trận tương ứng vi phép quay này là:
cos -sin 0
sin cos 0
0 0 1
z
R ( )






(3)
Để tham kho chi tiết v các góc Euler, đc gi
có th tìm hiu tài liu [3, 5].
3.2. Phép quay quanh một trục bất kỳ
Ta hiu
phép quay quanh vector
n mt góc
, theo như minh họa trong hình 3.
đây, n vector đơn vị góc
biến thiên
t
đến
.
Hình 3. Phép quay quanh trc n mt góc
Các phép quay cơ bn trong các công thc (1),
(2), (3) những trường hợp đặc bit ca
phép quay
, theo như dưới đây.
Tính cht ca phép quay
:
Gi s i, j, k các vector đơn vị tương ng
vi mi trc ta độ Ox, Oy, Oz. Khi đó, các
KHOA HC - CÔNG NGH
4 TP CHÍ KHOA HC & CÔNG NGH . S 26 - 2021
phép quay cơ bản trong các công thc (1), (2),
và (3) tương ứng như sau:
( ) = ( , )
x
R R i

( ) = ( , )
y
R R j

( ) = ( , )
z
R R k

Ngoài ra,
( , ) = (- , - )R n R n

.
Phép quay ngưc vi
là
(- , )Rn
hoc
( , - )Rn
.
3.3. Xác định ma trận trực giao từ trục
quay và góc quay
Bài toán 1. Gi s vector đơn vị n tọa độ
trong không gian n=(nx, ny, nz). Ta cn xác
định ma trn trc giao A ca phép quay
như miêu tả trong mc 3.2.
Ma trn A trong Bài toán 1 đưc cho bi công
thc sau [3].
11 12 13
21 22 23
31 32 33
A A A
A A A A
A A A





(4)
trong đó:
11 (1 cos ) cos
xx
A n n

21 (1 cos ) sin
x y z
A n n n

31 (1 cos ) sin
x z y
A n n n

12 (1 cos ) sin
x y z
A n n n

22 (1 cos ) cos
yy
A n n

32 (1 cos ) sin
y z x
A n n n

13 (1 cos ) sin
x z y
A n n n

23 (1 cos ) sin
y z y
A n n n

33 (1 cos ) cos
zz
A n n

Hàm s MATLAB RotaAxis sau đây cho
phép ta tính toán ma trn quay khi biết vector
n và góc
.
function A = RotaAxis(n,phi)
% Returns rotation matrix A from n and phi.
% USAGE: A = RotaAxis(n,phi)
A = [cos(phi) -n(3)*sin(phi) n(2)*sin(phi);
n(3)*sin(phi) cos(phi) -n(1)*sin(phi);
-n(2)*sin(phi) n(1)*sin(phi) cos(phi)];
A = (1-cos(phi))*n'*n+A;
3.4. Xác định trục quay và góc quay từ ma
trận trực giao
Bài toán 2. Gi s ma trn trc giao A ca
phép quay
như sau:
11 12 13
21 22 23
31 32 33
A A A
A A A A
A A A





Ta cần xác định các thành phn ca vector đơn
v n=(nx, ny, nz) góc
qua các phn t ca
A.
Góc quay
được xác định bi công thc [3]
11 22 33
1
cos 1
2
A A A A
(5)
và vectơ đơn vị n=(nx, ny, nz) được xác định bi
32 23
=2
x
AA
nsin
,
13 31
=2
y
AA
nsin
,
21 12
=2
z
AA
nsin
Hàm s MATLAB RotaAxisInverse sau đây
tr v vectơ n góc quay
khi biết ma trn
A.
function [n,phi] = RotaAxisInverse(A)
% Returns the vector n and angle phi from A
% USAGE: [n,phi] = RotaAxisInverse(A)
phi=acos(0.5*((trace(A)-1));
n(1)=0.5*(A(3,2)-A(2,3))/sin(phi);
n(2)=0.5*(A(1,3)-A(3,1))/sin(phi);
n(3)=0.5*(A(2,1)-A(1,2))/sin(phi);
3.5. Mối quan hệ giữa phép quay
và các phép quay cơ bản
Nếu ta thc hin phép quay theo th t
z-y-x như trong [4], ta
= ( ) ( ) ( )
x y z
R R R
. So sánh gia hai ma trn
A
, quan h gia
( , )n
các góc
Euler được cho bởi các phương trình sau:
KHOA HC CÔNG NGH
TP CHÍ KHOA HC & CÔNG NGH . S 26 - 2021 5
13
sin (1 cos ) sin
x z y
A n n n
23
33
(1 cos ) + sin
tan = = (1 cos ) + cos
y z x
zz
n n n
A
A n n



12
11
(1 cos ) + sin
tan = = (1 cos ) + cos
x y z
xx
n n n
A
A n n



4. ỨNG DỤNG PHÉP QUAY TRONG VIDEO
GAME
Bài toán áp dng. Cho trước vector đơn vị n
góc quay
, ta cn tìm nh hình khi lp
phương trên qua phép quay
).
Li gii bài toán.
Ta xét bài toán trên cho khi lập phương C
với 8 đỉnh ta độ tương ng 8 vector ct
trong ma trn c 3×8 sau:
4 5 4 5 4 5 4 5
1 1 2 2 1 1 2 2
1 1 1 1 2 2 2 2
C





Gi s CR nh ca khi lập phương
C khi thc hin phép quay vi n=(2/3,
2/3,1/3) và


.
Ta s gii bài toán trên theo 2 cách. Cách th
nht, khi lập phương CR s được tìm trc
tiếp thông qua phép quay
. Cách th
hai, ta s tìm CR mt cách gián tiếp thông qua
các phép quay bản bng vic tính toán các
góc Euler.
Phương pháp 1 (tính trc tiếp)
c 1. Tính ma trn quay ca
. Theo
công thc (3.4), ta có:
0.1111 0.8889 0.4444
0.8889 0.1111 0.4444
0.4444 0.4444 0.7778
A






c 2. Tính ma trn ta độ ca CR tích ca
AC:
CR = AC
Quá trình tính toán được thc hin bi hàm
RotaCube trong MATLAB như sau.
function Cr = RotaCube(C,n,phi)
% Returns the image’s coordinate of cube C
% when rotating C around vector n at an angle phi.
% USAGE: Cr = RotaCube(C,n,phi)
A=RotaAxis(n,phi);
Cr=A*C;
D liu ca ma trn CR được cho trong
hàng cui ca bng 1. Hình 4 minh ha
quá trình quay khi lập phương C theo vector n
vi góc
lần lượt nhn các giá tr
2
0, , ,
43





.
Hình 4. Các khi lập phương thu được trong Phương pháp 1 khi quay quanh trc n mt góc ,
vi góc ln lưt nhn các giá tr
2
0, , ,
43




