Конгер Д.
Физика для разработчиков компьютерных игр
стр. 272

Предупреждение

О погрешности вычислений с плавающей запятой нужно всегда помнить при написании игр. Один из основных приемов, позволяющих защититься от нее - никогда не проверять, равно ли что-то 0.0. Ответ почти никогда не будет правильным. Проверяйте, близко ли значение к 0.0 настолько, чтобы считаться равным 0.0.

Если расстояние не близко к 0, в строке 23 проверяется, не перекрываются ли ограничивающие сферы. При этом расстояние будет меньше 0. Если это так, функция CollisionOccured () присваивает переменной collisionStatus значение, указывающее на столкновение с перекрытием.

Если ни одно из условий не выполнилось, то изначально сделанное предположение оказывается верным - столкновения нет.

Метод CalculateReactions () начинается со строки 31 листинга 10.4. Он начинается с вычисления коэффициента восстановления столкновения в строках 35-37. Этот коэффициент вычисляется как среднее арифметическое коэффициентов восстановления тел, участвующих в столкновении. Использование такого подхода позволяет учесть эластичность (или отсутствие таковой) всех тел, участвующих в столкновении.

Остальная часть функции вычисляет импульсную силу по формуле, учитывающей и линейные, и угловые компоненты. Эта формула еще раз приведена ниже:

Это сложная формула, и вычисление результата по ней в методе CalculateReactions () разбито на несколько этапов. Сначала в строках 42-45 вычисляется числитель. Найти знаменатель сложнее. Его нахождение разделено на несколько шагов и выполняется справа налево.

Сначала вычитанием векторов местоположений центров масс и нормализацией результата находится единичный нормальный вектор. В результате получается величина п из формулы.

В строках 58-59 метод CalculateReactions () находит вектор, указывающий на точку соприкосновения. Как уже говорилось раньше, мы будем рассматривать точечные соприкосновения между ограничивающими сферами. В результате расчета мы получим величину г2 из выражения в знаменателе формулы.

В строке 61 вектор г2 умножается на п. В строках 64-66 результат умножения делится на компоненты вращательной инерции тела 2. Результат деления умножается на г2. На этом заканчиваются расчеты первого справа члена знаменателя. Весь процесс нужно повторить для второго справа члена. Это делается в строках 77-94.

Новости
Список персонажей SoulCalibur 6 пополнил Вольдо
В Сети появился новый трейлер SoulCalibur 6, посвящённый Вольдо — он пополнил список персонажей, которые будут доступны в день релиза игры.
Анонсирован скорый выход обновления «Ночная жизнь» в GTA Online
Компания Rockstar представила трейлер обновления «Ночная жизнь» для GTA Online.