Нещодавно я дізнався, що ми багато використовуємо теорему Піфагора у своїх фізичних обчисленнях, і я боюся, що я не розумію цього.
Ось приклад із книги, щоб переконатися, що об’єкт не рухається швидше, ніж 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
}
}
Переваги робити це без Піфагора:
- Менше ліній
- У цих рядках простіше читати, що відбувається
- ... і для обчислення потрібно менше часу, оскільки примноження менше
Мені здається, що комп'ютери і люди отримують кращу справу без теореми Піфагора! Тим НЕ менше, я впевнений , що я не маю рації , як я бачив теорему Піфагора в ряді відомих місць, тому я хотів би хто - небудь пояснити мені переваги використання теореми Піфагора до математики новачка .
Чи має це щось спільне з одиничними векторами? Для мене одиничний вектор - це коли ми нормалізуємо вектор і перетворимо його на дріб. Ми робимо це діленням вектора на більшу постійну. Я не впевнений, яка це константа. Загальний розмір графіка? У будь-якому випадку, тому що це частка, я вважаю, що одиничний вектор - це в основному графік, який може вміститися всередині 3D-сітки з віссю 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
Знову ж таки, я не бачу, чому це краще, але це більше "одиниця-вектор-у", тому що мультиплікативний_скаляр є одиницею-вектором? Як бачите, я використовую такі слова, як "одиниця-вектор-у", тому я насправді не з математики! Також усвідомлюйте, що одиничні вектори можуть не мати нічого спільного з теоремою Піфагора, тому ігноруйте все це, якщо я гаваю неправильне дерево.
Я дуже візуальна людина (3D-модельєр та художник-концептолог у галузі торгівлі!) І знаходжу діаграми та графіки справді, дуже корисні, щоб якомога гуманніше просимо!
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
має величину приблизно 3,54, а не 5.