Шукати в цьому блозі

ІГРОВА ФІЗИКА

Для тих хто призабув шкільну математику - трохи ігрової фізики



Робота з векторами

Позиція об'єкта - це просто вектор в просторі
v= (x,y) 

Швидкість об'єкта - це зміна розташування в секунду. Швидкість дається як вектор швидкості, який являє собою поєднання вектора напрямку (довжиною в одиницю) в сторону, в яку направляється
Об'єкт, і швидкості в метрах в секунду, з якою рухається об'єкт. Швидкість управляє тільки довжиною вектора швидкості. Якщо ми
Нормалізуємо вектор швидкості, ми отримаємо вектор напрямку довжиною в оди-ніцу.

v= (x,y)

Прискорення об'єктів - це зміна їх швидкості в секунду. Ми можемо висловлювати це або в скалярах scalar, які просто відображають швидкість (довжину вектора швидкості) або як вектор v=(x, y), щоб у нас було різне прискорення по осях х та у.

Складати вектори:

Складати вектори:
c= a+ b= (a.x, a.y) + (b.x, b.y) = (a.x+ b.x, a.y+ b.y) 

Припустимо, місце розташування A =(3, 2), а його швидкість v =(-2; 3).
Ми подорожуємо у нове місце An =(3 + -2; 2 + 3) =(1,5).
Місце розташування і швидкість вимірюються в одних і тих же одиницях.

Віднімати вектори:
C=a-b= (a.x, a.y) - (b.x, b.y) = (a.x - b.x, a.y - b.y)

Ми завжди віднімаємо стартову позицію від кінцевої.

Множити вектор на скаляр:
A = a * scalar = (a.x * scalar, a.y * scalar) 

Це дозволяє нам змінювати довжину вектора.

Підрахувати довжину вектора
(В тих одиницях, в яких вона вимірюється):

A(довжина)= sqrt(a.x*a.x+ a.y*a.y) 

Напрямок векторів є безрозмірною величиною.
Зробити цю величину і розмірної, помноживши вектор на скаляр
Вектори, чия довжина  дорівнює 1, називаються одиничними

Перетворити вектор в одиничний, розділивши кожен його компонент на його довжину:

A = (a.x/A(довжина), a.y/A(довжина))

Створити одиничний вектор напрямку з вектора відстані
A = (a.x/A(довжина), a.y/A(довжина))  

Трохи тригонометрії
Перевести градуси в радіани

degreesToRadians(angleInDegrees) = angleInDegrees / 180 * pi 
radiansToDegrees(angle) = angleInRadians/ pi* 180 

Маючи кут, створити одиничний вектор напрямку:

v = (cos(angle), sin(angle)) 

Підрахувати кут вектора щодо осі х:

angle = atan2(v.y, v.x) 

Повернемо вектор проти годинникової стрілки

v.x = cos(angle) * v.x - sin(angle) * v.y 
v.y = sin(angle) * v.x + cos(angle) * v.y 

Сила і маса
Сила = маса * прискорення
Прискорення = сила / маса

Чим більше маса об'єкта, тим більшу силу нам потрібно застосувати, щоб вона прискорювалася так само швидко, як і об'єкт меншої ваги

Прискорення на (0; -10) метрів в секунду за секунду дорівнює прискоренню, яке зазнає об'єкт, падаючи на землю незалежно від його маси

Людина у вільному падінні може досягти максимальної швидкості 125 миль на годину.
  Якщо перевести це в метри в секунду (125 ⋅ 1,6 ⋅1000 / 3600), ми отримаємо 55,5 м / с.

Плавний стрибок -

При стрибку ми маємо певну стартову швидкість jumpSpeed.
З цією швидкістю ми рухаємося вгору.
При відсутності гравітації ми б постійно летіли вгору з цією швидкістю.

playerY += jumpSpeed

Однак кожну секунду на нас діє сила тяжіння, тому швидкість руху вгору постійно зменшується на деяку змінну gravityPower.

jumpspeed -= gravityPower

Приклад.
Швидкість стрибка =1. Гравітація 0.2
В першу секунду гравець пролетить 1, у другу 0.8, в третю 0.6, на п'яту секунду його швидкість дорівнюватиме 0 і він ненадовго зависне. Далі jumpSpeed ​​опускається нижче 0 і гравець починає рухатися вниз, спершу на 0.2, потім на 0.4 і т.д.
Твоя задача - відрегулювати змінні jumpSpeed ​​і gravityPower так, щоб стрибок виглядав реалістично.






Немає коментарів:

Дописати коментар