Конгер Д.
Физика для разработчиков компьютерных игр
стр. 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.

Новости
Владельцы Dark Souls в Steam получат скидку на Dark Souls Remastered
В то время, как подавляющее большинство компаний хлебом не корми - дай только в очередной раз содрать полную сумму за какое-нибудь переиздание, эти благородные японцы объявили о том, что все владельцы оригинальной Dark Souls (Prepare to Die Edition в Steam) получат… нет, не Dark Souls Remastered бесплатно, а скидку на неё.
Tencent вложит $ 15 млн в продвижение Fortnite в Китае
Китайская корпорация Tencent займётся продвижением Fortnite в Китае.