Недавно я узнал, что мы часто используем теорему Пифагора в наших физических расчетах, и я боюсь, что на самом деле не понимаю.
Вот пример из книги, чтобы убедиться, что объект движется не быстрее, чем MAXIMUM_VELOCITY
постоянная в горизонтальной плоскости:
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;
}
}
Давайте попробуем это с некоторыми числами:
Объект пытается переместить 5 единиц в x и 5 единиц в z. Он должен иметь возможность перемещать только 5 единиц по горизонтали!
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
}
}
Теперь это работает хорошо, но мы можем сделать то же самое без Пифагора:
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
}
}
Преимущества делать это без Пифагора:
- Меньше строк
- В этих строках легче читать, что происходит
- ... и вычисление занимает меньше времени, так как меньше умножений
Мне кажется, что компьютеры и люди получают лучшую сделку без теоремы Пифагора! Однако я уверен, что ошибаюсь, поскольку видел теорему Пифагора в ряде авторитетных мест, поэтому я хотел бы, чтобы кто-то объяснил мне преимущество использования теоремы Пифагора для новичка по математике .
Это как-то связано с единичными векторами? Для меня единичный вектор - это когда мы нормализуем вектор и превращаем его в дробь. Мы делаем это путем деления вектора на большую константу. Я не уверен, что это за константа. Общий размер графика? В любом случае, потому что это дробь, я так понимаю, единичный вектор - это, в основном, график, который может поместиться в трехмерной сетке с осью X, бегущей от -1 до 1, осью Z, бегущей с -1 до 1, и Y ось работает от -1 до 1. Это буквально все, что я знаю о единичных векторах ... не так много: P И я не вижу их полезности.
Кроме того, мы на самом деле не создаем единичный вектор в приведенных выше примерах. Должен ли я определить скаляр следующим образом:
// 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
Опять же, я не понимаю, почему это лучше, но это больше "unit-vector-y", потому что multiplicative_scalar - это unit_vector? Как вы можете видеть, я использую такие слова, как «unit-vector-y», так что я на самом деле не математик! Также помните, что единичные векторы могут не иметь ничего общего с теоремой Пифагора, поэтому игнорируйте все это, если я лаю не на том дереве.
Я очень визуальный человек (3D модельер и концепт-художник по профессии!), И я нахожу диаграммы и графики действительно, очень полезными, так что, насколько это возможно, пожалуйста!
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
имеет величину приблизительно 3,54, а не 5.