Розділ 2. Сили
Не варто недооцінювати Силу.
— Дарт Вейдер
Олександр Колдер був американським митцем 20-го століття, відомим своїми кінетичними скульптурами, які врівноважують форму і рух. Його “сузір’я” були скульптурами, що складалися з взаємопов’язаних форм і дроту, які демонстрували напругу, рівновагу та постійне гравітаційне тяжіння.
У фінальному прикладі Розділу 1 я продемонстрував, як обчислити динамічне прискорення на основі вектора, що вказує від кульки на полотні до положення курсора. Отриманий рух нагадував магнітне притягання між фігурою і курсором, ніби якась сила тягнула кульку до курсора. У цьому розділі я детально розповім про концепцію сили та її зв’язок із прискоренням. Метою цього розділу буде створення простого фізичного рушія та пояснення того, як об’єкти рухаються на полотні, реагуючи на різні сили середовища.
Фізичний рушій — це комп’ютерна програма (або бібліотека коду), яка моделює поведінку об’єктів у фізичному середовищі. У програмі p5.js об’єкти — це 2D форми, а середовище — прямокутне полотно. Фізичні рушії можуть бути розроблені для високої точності (вимагають високопродуктивних обчислень) або реального часу (з використанням простих і швидких алгоритмів). У цьому розділі зосереджено увагу на створенні елементарного фізичного рушія з фокусом на його швидкість та простоту.
Сили й закони руху Ньютона
Почнімо з концептуального погляду на те, що означає сила в реальному світі. Як і слово вектор, термін сила може мати різноманітні значення. Він може вказувати на потужну фізичну інтенсивність, як у фразі “Вони штовхали валун із великою силою”, або на потужний вплив, як у вислові “Вони — сила, з якою необхідно рахуватися!” Визначення сили, яке мене цікавить для цього розділу, більш формальне і походить від трьох законів руху сера Ісаака Ньютона:
Сила — це вектор, який впливає на прискорення об’єкта з масою.
Сподіваюся, ви розпізнали першу частину визначення: сила — це вектор. Добре, що ви щойно пройшли цілий розділ, вивчаючи, що таке вектори і як з ними програмувати! Тепер я продовжу з пояснення, як три закони руху Ньютона пов’язані з тим, що ви вже знаєте про вектори, і по ходу розповіді побудую сцену для решти визначень сили.
Перший закон Ньютона
Перший закон Ньютона зазвичай формулюється так:
Об’єкт, що перебуває у спокої, залишається у стані спокою, а об’єкт, що рухається, залишається у русі.
Однак тут відсутній важливий елемент, пов’язаний із силами. Я можу розширити це визначення, заявивши:
Об’єкт у стані спокою залишається у спокої, а об’єкт у стані руху залишається у русі з постійною швидкістю і напрямком, якщо на нього не діє незбалансована сила.
До появи Ньютона, панівній теорії руху, сформульованій Арістотелем, було майже 2000 років. Вона стве рджувала, що якщо об’єкт рухається, для його подальшого руху потрібна якась сила. Якщо цю рухому річ не підштовхувати або не тягнути, вона сповільниться або зупиниться. Ця теорія була підтверджена шляхом спостереження за світом. Наприклад, якщо ви кинете м’яч, він впаде на землю і зрештою зупиниться, оскільки сила поштовху більше не діятиме на нього.
Ця старіша теорія, звісно ж, не відповідає дійсності. Як встановив Ньютон, за відсутності будь-яких сил, щоб підтримувати рух тіла не потрібна сила. Коли об’єкт (наприклад, вищезгаданий м’яч) підкидається в земній атмосфері, його швидкість змінюється через невидимі сили, такі як опір повітря і гравітація. Швидкість об’єкта залишатиметься постійною лише за відсутності будь-яких сил або якщо сили, які діють на нього, компенсують одна одну, тобто сумарна сила дорівнюватиме нулю. Це часто називається рівновагою (див. малюнок 2.1). М’яч, що падає, досягне кінцевої швидкості (яка залишатиметься постійною), коли сила опору повітря дорівнюватиме силі тяжіння.
З урахуванням полотна p5.js я можу переформулювати перший закон Ньютона наступним чином:
Вектор швидкості об’єкта залишатиметься постійним, якщо він перебуває у стані рівноваги.
Іншими словами, у класі Mover
функція update()
не повинна застосовувати жодні математичні операції до вектора швидкості, якщо немає якоїсь сумарної сили, відмінної від нуля.
Третій закон Ньютона
Дозвольте мені на мить відкласти другий закон Ньютона (мабуть, найважливіший закон для цілей цієї книги) і перейти до його третього закону. Цей закон часто формулюється так:
На кожну дію є рівна протидія.
Спосіб формулювання цього закону часто викликає плутанину. З одного боку, це звучить так, ніби одна сила викликає іншу. Наче, якщо ви штовхаєте когось, то цей хтось може активно вирішити штовхнути вас назад. Але третій закон Ньютона має на увазі не цю дію і реакцію.
Скажімо, ви штовхаєте стіну. Стіна не вирішує активно відштовхувати вас назад, але все ж чинить опір з рівною силою у протилежному напрямку. У стіни немає власного “джерела” сили. Ваш тиск просто включає обидві сили, які називаються парою дії/протидії. Кращим способом формулювання третього закону Ньютона може бути наступне:
Сили завжди виникають парами. Обидві сили мають однакову міць, але протилежні напрямки.
Це все ще викликає плутанину, оскільки звучить так, ніби ці сили завжди нівелюють одна одну. Це не той випадок. Пам’ятайте, що сили діють на різні об’єкти. І просто тому, що обидві сили рівні, це не означає, що рухи об’єктів однакові (або що об’єкти перестануть рухатися).
Розглянемо штовхання нерухомої вантажівки. Попри те, що вантажівка набагато масивніша за вас, у нерухомому стані вона ніколи не здолає вас і не змусить відлетіти назад. Сила, з якою ваші руки діють на вантажівку, рівна і протилежна силі, з якою вантажівка діє на ваші руки. Результат залежить від низки інших факторів. Якщо вантажівка невелика і припаркована на зледенілій поверхні, ви, ймовірно, зможете змусити її рухатися. З іншого боку, якщо це дуже велика вантажівка на ґрунтовій дорозі, то штовхнувши її досить сильно (можливо, навіть з розбігу), можна ушкодити свою руку.
А що, якщо під час поштовху вантажівки ви будете на роликах, як показано на малюнку 2.2?
Ви рухатиметеся від вантажівки, ковзаючи по дорозі, поки вантажівка залишатиметься на місці. Чому ви ковзаєте, а не вантажівка? По-перше, вантажівка має набагато більшу масу (про це я розповім за допомогою другого закону Ньютона). Тут також діють й інші сили, зокрема тертя об дорогу шин вантажівки та ваших роликів.
Знову, враховуючи p5.js, я міг би переформулювати третій закон Ньютона наступним чином:
Якщо ви обчислюєте p5.Vector
під назвою f
, який представляє дію сили об’єкта на об’єкт , ви також повинні застосувати протилежну силу, з якою об’єкт діє на об’єкт . Ви можете обчислити цю іншу силу як p5.Vector.mult(f, -1)
.
Невдовзі ви побачите, що у світі програмування симуляцій часто не обов’язково дотримуватися третього закону Ньютона. Іноді, наприклад, у випадку гравітац ійного притягання між тілами (див. приклад 2.8), я захочу моделювати рівні й протилежні сили. В інших випадках, наприклад, у сценарії де я скажу: “Гей, тут дмухає вітер”, я не збираюся моделювати зворотну силу, з якою тіло діятиме на повітря. Насправді я взагалі не буду моделювати повітря! Пам’ятайте, що приклади в цій книзі надихаються фізикою природного світу з метою творчості та інтерактивності. Вони не вимагають ідеальної точності.
Другий закон Ньютона
Настав час для найважливішого закону для кодерів на p5.js: другого закону Ньютона. Він формулюється наступним чином:
Сила дорівнює масі, помноженій на прискорення.
Або:
Чому це найважливіший закон для цієї книги? Що ж, запишемо це рівняння по-іншому:
Прискорення прямо пропорційно силі й обернено пропорційно масі. Подумайте, що це означає, якщо вас штовхнути? Чим сильніше поштовх, тим швидше буде збільшення або зменшення вашої швидкості (прискорення). З іншого боку, чим ви більші, тим менш ефективна сила для вашого прискорення!
Вага проти маси
Масу не слід плутати з вагою. Маса є мірою кількості речовини в об’єкті (вимірюється в кілограмах). Об’єкт з масою 1-го кілограма на Землі матиме масу 1-го кілограма на Місяці.
Вага, яку часто плутають з масою, технічно є силою тяжіння, що діє на об’єкт. Згідно з другим законом Ньютона, ви можете обчислити вагу як масу, помножену на прискорення вільного падіння (