Робота з векторами
Позиція об'єкта - це просто вектор в просторі
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 так, щоб стрибок виглядав реалістично.
Немає коментарів:
Дописати коментар