Gần đây tôi đã biết rằng chúng tôi sử dụng định lý Pythagore rất nhiều trong các tính toán vật lý của chúng tôi và tôi sợ rằng tôi không thực sự hiểu được.
Dưới đây là một ví dụ từ một cuốn sách để đảm bảo một vật thể không di chuyển nhanh hơn MAXIMUM_VELOCITY
hằng số trong mặt phẳng ngang:
MAXIMUM_VELOCITY = <any number>;
SQUARED_MAXIMUM_VELOCITY = MAXIMUM_VELOCITY * MAXIMUM_VELOCITY;
function animate(){
var squared_horizontal_velocity = (x_velocity * x_velocity) + (z_velocity * z_velocity);
if( squared_horizontal_velocity <= SQUARED_MAXIMUM_VELOCITY ){
scalar = squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY;
x_velocity = x_velocity / scalar;
z_velocity = x_velocity / scalar;
}
}
Hãy thử điều này với một số con số:
Một đối tượng đang cố gắng di chuyển 5 đơn vị theo x và 5 đơn vị theo z. Nó chỉ có thể di chuyển tổng cộng 5 đơn vị theo chiều ngang!
MAXIMUM_VELOCITY = 5;
SQUARED_MAXIMUM_VELOCITY = 5 * 5;
SQUARED_MAXIMUM_VELOCITY = 25;
function animate(){
var x_velocity = 5;
var z_velocity = 5;
var squared_horizontal_velocity = (x_velocity * x_velocity) + (z_velocity * z_velocity);
var squared_horizontal_velocity = 5 * 5 + 5 * 5;
var squared_horizontal_velocity = 25 + 25;
var squared_horizontal_velocity = 50;
// if( squared_horizontal_velocity <= SQUARED_MAXIMUM_VELOCITY ){
if( 50 <= 25 ){
scalar = squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY;
scalar = 50 / 25;
scalar = 2.0;
x_velocity = x_velocity / scalar;
x_velocity = 5 / 2.0;
x_velocity = 2.5;
z_velocity = z_velocity / scalar;
z_velocity = 5 / 2.0;
z_velocity = 2.5;
// new_horizontal_velocity = x_velocity + z_velocity
// new_horizontal_velocity = 2.5 + 2.5
// new_horizontal_velocity = 5
}
}
Bây giờ điều này hoạt động tốt, nhưng chúng ta có thể làm điều tương tự mà không cần Pythagoras:
MAXIMUM_VELOCITY = 5;
function animate(){
var x_velocity = 5;
var z_velocity = 5;
var horizontal_velocity = x_velocity + z_velocity;
var horizontal_velocity = 5 + 5;
var horizontal_velocity = 10;
// if( horizontal_velocity >= MAXIMUM_VELOCITY ){
if( 10 >= 5 ){
scalar = horizontal_velocity / MAXIMUM_VELOCITY;
scalar = 10 / 5;
scalar = 2.0;
x_velocity = x_velocity / scalar;
x_velocity = 5 / 2.0;
x_velocity = 2.5;
z_velocity = z_velocity / scalar;
z_velocity = 5 / 2.0;
z_velocity = 2.5;
// new_horizontal_velocity = x_velocity + z_velocity
// new_horizontal_velocity = 2.5 + 2.5
// new_horizontal_velocity = 5
}
}
Lợi ích của việc làm mà không cần Pythagoras:
- Ít dòng
- Trong những dòng đó, việc đọc những gì đang diễn ra sẽ dễ dàng hơn
- ... và mất ít thời gian hơn để tính toán, vì có ít phép nhân hơn
Dường như với tôi như máy tính và con người có được một thỏa thuận tốt hơn mà không cần định lý Pythagore! Tuy nhiên, tôi chắc chắn rằng tôi đã sai khi tôi thấy định lý của Pythagoras ở một số nơi có uy tín, vì vậy tôi muốn ai đó giải thích cho tôi lợi ích của việc sử dụng định lý Pythagore cho một người mới học toán .
Điều này có liên quan gì đến vectơ đơn vị không? Đối với tôi một vectơ đơn vị là khi chúng ta bình thường hóa một vectơ và biến nó thành một phần. Chúng tôi làm điều này bằng cách chia vectơ cho một hằng số lớn hơn. Tôi không chắc nó là gì. Tổng kích thước của đồ thị? Dù sao, vì nó là một phân số, tôi lấy nó, một vectơ đơn vị về cơ bản là một biểu đồ có thể nằm gọn trong lưới 3D với trục x chạy từ -1 đến 1, trục z chạy từ -1 đến 1 và y -axis chạy từ -1 đến 1. Đó thực sự là tất cả những gì tôi biết về vectơ đơn vị ... không nhiều: P Và tôi không thấy được sự hữu ích của chúng.
Ngoài ra, chúng tôi không thực sự tạo ra một vectơ đơn vị trong các ví dụ trên. Tôi có nên xác định vô hướng như thế này không:
// a mathematical work-around of my own invention. There may be a cleverer way to do this! I've also made up my own terms such as 'divisive_scalar' so don't bother googling
var divisive_scalar = (squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY);
var divisive_scalar = ( 50 / 25 );
var divisive_scalar = 2;
var multiplicative_scalar = (divisive_scalar / (2*divisive_scalar));
var multiplicative_scalar = (2 / (2*2));
var multiplicative_scalar = (2 / 4);
var multiplicative_scalar = 0.5;
x_velocity = x_velocity * multiplicative_scalar
x_velocity = 5 * 0.5
x_velocity = 2.5
Một lần nữa, tôi không thể thấy lý do tại sao điều này tốt hơn, nhưng đó là "đơn vị-vector-y" nhiều hơn bởi vì phép nhân_scalar là một đơn vị? Như bạn có thể thấy, tôi sử dụng các từ như "đơn vị-vector-y" vì vậy tôi thực sự không phải là một nhà toán học! Cũng lưu ý rằng các vectơ đơn vị có thể không liên quan gì đến định lý Pythagore vì vậy hãy bỏ qua tất cả những điều này nếu tôi sủa sai cây.
Tôi là một người rất trực quan (người điều hành 3D và nghệ sĩ khái niệm bằng thương mại!) Và tôi thấy sơ đồ và đồ thị thực sự, thực sự hữu ích để nhiều người có thể làm ơn!
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
có cường độ xấp xỉ 3,54, không phải 5.