Капсула в сферу столкновения - PullRequest
0 голосов
/ 26 мая 2019

Для моей математической единицы в университете мы должны вручную вычислить, сталкивается ли сфера с капсульным коллайдером.

Position Diagram

Информация, с которой я должен идти, это:

У вас есть следующая сфера:

LadyBird3 - CentrePoint = (0, 0, 0), радиус = 18,0 И следующая капсула

Sanic - BottomPoint = (0,2,6), TopPoint = (0, 12, 6), Радиус = 5.0 Определите, происходит ли следующее попарное столкновение:

Sanic & LadyBird3 В нашей лекции нам говорится следующее:

ПРИМЕЧАНИЕ. Нормализация на этом этапе не важна

Во-первых, мы собираемся проверить точечный продукт AC и AB

Если этот точечный продукт меньше 0, это означает, что ближайшая точка от отрезка к C - это A

Таким образом, мы можем просто вернуть квадрат длины переменного тока и прекратить любые дальнейшие вычисления

Теперь мы выполняем тот же тест с точечным продуктом BA и BC

Еще раз, если Dot Product меньше 0, B будет ближайшей точкой на отрезке линии к C, поэтому мы просто вернем длину BC и остановим все дальнейшие вычисления.

Проекция ... Если точечное произведение вернуло> 0 для обеих точек отрезка, нам нужно спроецировать C на AB, чтобы получить расстояние. Есть эффективный способ получить квадрат расстояния, если это все, что нас волнует:

SquaredDistance = AC.LengthSq - (AC. AB) * (AC. AB) / AB.LengthSq

При выполнении точечного произведения здесь мы должны убедиться, что оно НЕ нормализовано.

И последний шаг - использовать это квадратное расстояние и сравнить его с суммой обоих радиусов в квадрате, чтобы определить, есть ли пересечение.

Итак, я пытаюсь вычислить, пересекаются они или нет, используя информацию сверху.

Все, что мне удалось придумать, это вот что (убрать позиции LadyBird3 из позиции Sanics (TP, BP))

AC = (0, 2, 6)

AB = (0, -10, 0)

Точечный продукт = -20

BA = (0, 10, 0)

BC = (0, 12, 6)

Точечный продукт = 120

Такое ощущение, что значения, которые я получаю, не верны, или процесс, который я делаю, неверен ... Кто-нибудь может указать мне правильное направление?

...