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.
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 s
và t
là bằng nhau cho dù ta có thay đổi vị trí đặt của 2 vector thế nào đi nữ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ư:
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.
Giả sử ta có điểm A(xA, yA, zA) và điểm B(xB, yB, zB) trong không gian, để tính được vector AB ta áp dụng công thức sau:
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 v1 = (x1, y1, z1) và v2 = (x2, y2, z2), vậy tổng của 2 vector này được tính theo công thức sau:
v = (x1 + x2, y1 + y2, z1 + z2)
Tương tự như vậy, hiệu của 2 vector được tính với công thức:
v = (x1 - x2, y1 - y2, z1 - z2)
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
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 v = (x, y, z) ký hiệu là ||v|| được tính bởi công thức sau:
||v|| = √(x2 + y2 + z2)
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à như sau:
Tích vô hướng hai vector
Giả sử ta có 2 vector v1 = (x1, y1, z1) và v2 = (x2, y2, z2) 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:
v1 . v2 = x1x2 + y1y2 + z1z2
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:
v1 . v2 = ||u|| . ||v|| . cos(θ)
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 v1 . v2 = 0 : 2 vector vuông góc với nhau.
- Nếu v1 . v2 > 0 : góc giữa 2 vector nhỏ hơn 90 độ.
- Nếu v1 . v2 < 0 : 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 v1 = (x1, y1, z1) và v2 = (x2, y2, z2) tích có hướng giữa chúng được tính bằng công thức sau:
v3 = v1 x v2 = (y1z2 - z1y2, z1x2 - x1z2, x1y2 - y1x2)
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)
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