Vũ Quang Huy Vector là một khái niệm rất quen trong toán học; và chúng được ứng dụng trong rất nhiều lĩnh vực khác nhau: đồ họa máy tính, mô phỏng vật lý … Bài viết này muốn giới thiệu đến bạn đọc khái niệm về vector và một số phép toán phổ biến với vector như: cộng, trừ, nhân … cùng với vai trò của chúng.
Nội dung bài viết

Giới thiệu

Vector là một khái niệm rất quen trong toán học; và chúng được ứng dụng trong rất nhiều lĩnh vực khác nhau: đồ họa máy tính, mô phỏng vật lý … Bài viết này muốn giới thiệu đến bạn đọc khái niệm về vector và một số phép toán phổ biến với vector như: cộng, trừ, nhân … cùng với vai trò của chúng. 

Tiền đề bài viết

Khi làm việc cũng như giảng dạy về lập trình 3D, tôi nhận thấy vector là một trong những kiến thức cực kì quan trọng đối với một lập trình viên chuyên về độ họa – đặc biệt là vector dùng trong không gian 3 chiều. Vì thế bài viết này ra đời với mong muốn làm rõ một số vấn đề về vector và thao tác với chúng trong không gian 3 chiều.

Bài viết này dựa trên kinh nghiệm làm việc thực tế của tôi với sự góp ý của anh La Kiến Vinh.

Đối tượng hướng đến

Bài viết này hướng đến bạn đọc quan tâm đến các vấn đề về toán học, đặc biệt là vector. Bài viết không yêu cầu bạn đọc phải có kiến thức về vector mà chỉ cần một số kiến thức toán học cơ bản.

Vector là gì?

Trong toán học, người ta định nghĩa vector như sau:

Vector là một đại lượng biểu diễn cho cả độ lớn và hướng.

Ví dụ như để biểu diễn một lực nào đó tác dụng lên vật, ta có một vector gồm có 2 thành phần – độ lớn lực tác động lên vật đó và hướng tác động. Hay ta có thể dùng vector để biểu diễn vận tốc – tốc độ và hướng. Ngoài ra, ta còn có dạng vector thuần chỉ hướng. Đơn cử như việc diễn tả hướng nhìn của một camera trong không gian, hay ta muốn ám chỉ đến hướng mà ánh sáng di chuyển trong không gian.

ss_1

Ta có thể dễ dàng hình dung một vector trong không gian như thế nào. Tuy nhiên trong không gian hình học, ta không thể “hình dung” như thế. Vì vậy yêu cầu đặt ra là cần phải có một cách biểu diễn vector trong không gian hình học.

Biểu diễn vector trong không gian

Trong không gian, một vector được xác định bằng một đoạn thẳng với các tính chất như sau:

  • Độ dài đại diện cho độ lớn của vector
  • Hướng của vector (cả phương và chiều)

Cần lưu ý là trong hầu hết các trường hợp ta không đặt nặng vấn đề vị trí của vector vì khi thay đổi vị trí của vector thì độ lớn và phương của chúng vẫn được giữ nguyên (2 tính chất để hình thành nên một vector).

Chính vì tính chất này, do đó 2 vector bằng nhau khi và chỉ khi chúng có cùng độ lớn và cùng chỉ tới một phương xác định – như trong hình bên dưới ta có thể thấy được vector st là bằng nhau cho dù ta có thay đổi vị trí đặt của 2 vector thế nào đi nữa.

ss_2
 
Vector và hệ trục tọa độ

Với những nội dung đã trình bày ở trên, ta đã có thể ứng dụng một số phương pháp hình học để tính toán với vector, điển hình như:

ss_3

Tuy nhiên, trong toán học đại số hay gần gũi hơn là trong hệ thống máy tính, ta phải tìm một cách nào giúp “hiện thực” các khái niệm vector và từ đó chúng ta có thể dùng các phương pháp số học mà tính toán các vector này.  Và nhờ các hệ trục tọa độ khác nhau – mà cụ thể trong bài viết này tôi muốn đề cập đến hệ trục không gian 3 chiều – 3D coordinate system, ta có thể áp dụng các phương pháp số học để thao tác với vector.

Trong hệ trục tọa độ không gian 3 chiều, một vector được biểu diễn bởi 3 giá trị x, y và z.

ss_4

Giả sử ta có điểm
ss_5
và điểm
ss_6

trong không gian, để tính được vector AB ta áp dụng công thức sau:

ss_7

Một số phép toán cơ bản với vector

Cộng, trừ hai vector và nhân vector với một số

Giả sử ta có 2 vector
ss_8

ss_10

vậy tổng của 2 vector này được tính theo công thức sau:

ss_11
Tương tự như vậy, hiệu của 2 vector được tính với công thức:

ss_12

Lưu ý là tính chất giao hoán được áp dụng cho việc tính tổng 2 vector.

Để dễ hình dung hơn, ta có thể lấy minh họa 1 trái bóng được tác dụng bởi các lực khác nhau. Nếu 2 lực này cùng hướng ta sẽ tìm được tổng lực bằng phép cộng hai vector, ngược lại nếu 2 lực tác động này ngược hướng nhau, ta sẽ tính được lực cuối cùng áp dụng lên trái bóng bằng cách trừ 2 vector lực với nhau

ss_13
 
Ngoài ra, ta còn có thể nhân vector với một số thực. Khi đó ta sẽ được một vector tỷ lệ.

Độ lớn của vector và vector đơn vị

Ta có độ lớn của vector
ss_14
ký hiệu là
ss_15

được tính bởi công thức sau:

ss_16

Tuy nhiên, trong một số trường hợp ta chỉ quan tâm đến hướng của vector đó mà bỏ qua độ lớn của nó. Với trường hợp như vậy, ta mong muốn độ lớn của vector đó bằng 1 – những vector có tính chất như trên ta gọi chúng là vector đơn vị. Song song đó, việc chuyển một vector về thành vector đơn vị ta gọi là chuẩn hóa vector (normalize vector).

Ta chuẩn hóa một vector thành vector đơn vị kí hiệu làss_18 như sau:

ss_17

Tích vô hướng hai vector

Giả sử ta có 2 vector
ss_8

ss_10

tích vô hướng của hai vector này (hay còn gọi là dot product vì được biểu diến bằng một dấu chấm) được tính bởi công thức sau:

ss_19

Bằng việc áp dụng các phương pháp hình học, ta chứng minh được mối quan hệ giữa tích vô hướng và góc giữa các vector này như sau:

ss_20

Dựa theo công thức trên, ta có thể suy ra một số đặc điểm của 2 vector khi có tích vô hướng của chúng:

  • Nếu ss_22 : 2 vector vuông góc với nhau.
  • Nếu ss_23 : góc giữa 2 vector nhỏ hơn 90 độ.
  • Nếu ss_24: góc giữa 2 vector lớn hơn 90 độ.

Tích có hướng hai vector

Nếu như tích vô hướng cho ta biết được một số tính chất của 2 vector thì tích có hướng giúp ta tìm ra được vector pháp tuyến của mặt phẳng được tạo bởi 2 vector cho trước.

Giả sử ta có 2 vector
ss_8

ss_10

tích có hướng giữa chúng được tính bằng công thức sau:

ss_25

Cần lưu ý thêm là hướng của vector này phụ thuộc vào hệ trục đang được sử dụng (bàn tay trái – left handed hay bàn tay phải – right handed)

ss_26

Lời kết

Vector là một trong những kiến thức cốt lõi của lập trình đồ họa cả 2D và 3D, nhờ có vector ta có thể dễ dàng hiện thực nên một không gian như ý mình muốn. Có thể nói nếu không có sự hiện diện của vector thì gần như ngành đồ họa máy tính, cũng như các ứng dụng thực tiễn liên quan đến đồ họa ngày nay đã không ra đời.

Qua bài viết này, hy vọng có thể giúp cho bạn đọc hiểu sâu hơn về sự ra đời của vector cũng như một số các phép toán thông dụng trên vector.

Tham khảo

[1] Introduction to 3D Game Programming with DirectX 11 – Frank Luna (Author) – ISBN: 9781936420223 – Pub Date: January 2012 – Pages: 600

THẢO LUẬN
ĐÓNG