If you're seeing this message, it means we're having trouble loading external resources on our website.

Nếu bạn đang sử dụng bộ lọc web, vui lòng kiểm tra lại xem bộ lọc có chặn hai tên miền *.kastatic.org*.kasandbox.org hay không.

Nội dung chính

Độ lớn của vectơ và chuẩn hóa vectơ

Như chúng ta đã biết, phép nhân và phép chia với một số là cách để thay đổi độ lớn của vectơ mà không ảnh hưởng đến hướng của vectơ đó. Tuy nhiên, một câu hỏi đặt ra là: "Làm sao để biết được độ lớn của một vectơ là bao nhiêu?". Ta đã biết tọa độ (xy) nhưng chiều dài (tính bằng pixel) của mũi tên là bao nhiêu? Việc biết cách tính chiều dài (hay độ lớn) của một vectơ là rất hữu ích và quan trọng.
Hình 1.10: Chiều dài hay "độ lớn" của vectơ v được kí hiệu là |v|
Vectơ trong biểu đồ trên được vẽ dưới dạng một mũi tên và hai đường nét đứt có độ dài tương ứng với tọa độ xy. Tất cả tạo thành một tam giác vuông có cạnh góc vuông là đường nét đứt và cạnh huyền chính là mũi tên. Đến đây, ta có thể áp dụng định lý Pythagoras để tính độ dài cạnh huyền.
Theo định lý Pythagoras, a bình phương cộng b bình phương sẽ bằng c bình phương:
Với công thức này, ta có thể tính độ lớn của vectơ v như sau:
|v|=vxvx+vyvy
Do đó, phần định nghĩa phương thức này trong đối tượng PVector sẽ như sau:
PVector.prototype.mag = function() {
    return sqrt(this.x*this.x + this.y*this.y);
};
Chương trình sau sẽ minh họa một cách trực quan độ lớn của vectơ bằng một thanh ngang ở trên cùng khung kết quả:
Tính được độ lớn của vectơ là bước khởi đầu để chúng ta khám phá nhiều hướng đi hơn. Hướng đi đầu tiên là chuẩn hóa. Chuẩn hóa là quá trình chỉnh sửa một thứ ban đầu sao cho phù hợp với "tiêu chuẩn". Trong thế giới của vectơ, chuẩn hóa một vectơ tức là giữ nguyên hướng của vectơ đó và thay đổi độ lớn thành 1, hay chính là biến vectơ đó thành vectơ đơn vị.
Vectơ đơn vị hữu ích vì giúp ta biết được hướng của vectơ mà không cần phải bận tâm đến độ lớn. Bạn sẽ hiểu rõ hơn lợi ích này khi chuyển sang bài học tiếp theo về lực.
Với bất kỳ vectơ u nào, vectơ đơn vị của vectơ đó (ký hiệu là u^) được tính như sau:
u^=u|u|
Nói cách khác, để chuẩn hóa một vectơ, ta chia từng tọa độ cho độ lớn của vectơ đó. Giả sử một vectơ có độ lớn là 5. 5 chia 5 bằng 1. Khi mô tả bằng tam giác vuông, ta sẽ cần thu nhỏ kích thước của cạnh huyền bằng cách chia cho 5. Trong quá trình đó, độ dài của các cạnh góc vuông cũng giảm 5 lần.
Vì vậy, trong đối tượng PVector, ta có thể định nghĩa phương thức như sau:
PVector.prototype.normalize = function() {
  var m = this.mag();
  this.div(m);
};
Một vấn đề cần quan tâm, đó là nếu độ lớn của vectơ bằng 0 thì sao? Ta không thể chia cho 0! Một câu lệnh logic sẽ giải quyết được vấn đề này:
PVector.prototype.normalize = function() {
  var m = this.mag();
  if (m > 0) {
    this.div(m);
  }
};
Dưới đây là một chương trình trong đó vectơ biểu diễn vị trí chuột so với tâm khung kết quả luôn được chuẩn hóa (sau đó ta nhân vectơ đơn vị đó lên để người xem có thể nhìn thấy vì 1 pixel là rất nhỏ):
Khóa học "Mô phỏng tự nhiên" này được biên soạn dựa trên cuốn "The Nature of Code" (tạm dịch: Bản chất của lập trình) của tác giả Daniel Shiffman, được sử dụng theo giấy phép Creative Commons Attribution-NonCommercial 3.0 Unported License.

Tham gia cuộc thảo luận?

Chưa có bài đăng nào.
Bạn có hiểu Tiếng Anh không? Bấm vào đây để thấy thêm các thảo luận trên trang Khan Academy Tiếng Anh.