210 likes | 402 Views
Физика в игрите – част 1. Михаил Лозанов. Закони за движението на Нютон. Всяко тяло се стреми да остане в покой или да продължи да се движи по права линия с постоянна скорост, ако няма други външни сили които да му въздействат
E N D
Физика в игрите – част 1 Михаил Лозанов
Закони за движението на Нютон • Всяко тяло се стреми да остане в покой или да продължи да се движи по права линия с постоянна скорост, ако няма други външни сили които да му въздействат • Ускорението на едно тяло е пропорционално на резултантната сила която действа върху тялото и има същата посока • На всяка сила действаща върху тяло има равна по големина и обратна по посока друга сила
Свойства на твърдите тела • Маса • Център на масите • Масов инерционен момент
Закони за движението • Вторият закон на Нютон: • За линейно движение
Закони за движението • Вторият закон на Нютон • За ъглово движение
Инерционен тензор • За симетричните обекти показани на следващите слайдове всяка координатна ос е равнина на симетрия • Ixy, Iyx в уравненията се унищожават и остава само главният диагонал във инерционния тензор
Закони за движението • Линейно движение • a = F/m = dv/dt • v = dx/dt
Закони за движението • Ъглово движение • dw/dt = (Mcg - [w x (Iw)]) * Iinv • dq/dt = (1/2)wq
class RigidBody template <typename T> class RigidBody { public: vector3<T> m_F; //forces vector3<T> m_T; //moments matrix33<T> m_I; matrix33<T> m_Iinv; RigidBodyState<T> m_state; T m_mass; };
class RigidBody template <typename T> struct { vector3<T> p; vector3<T> v; vector3<T> w; quat<T> q; } RigidBodyState;
class RigidBody void DxDt(RigidBody<float>* body, RigidBodyState<float>* dxdy) { RigidBodyState<float>* current = &body->m_state; dxdy->p = current->v; dxdy->v = body->m_F * (1.0/body->m_mass); dxdy->w = (body->m_T - cross(current->w, body->m_I*current->w )) * body->m_Iinv; dxdt->q = current->q * quat(0, current->w) * 0.5; }
Откриване и обработка на колизиите Прилагане на силите в/у телата Изчисляване на силите в контактите Интегриране на диференциалното уравнение за всяко тяло