Добрый день. Помогите пожалуйста с решением проблемы: Есть Функция нахождения пересечения двух отрезков, результат функции - t0, t1, distanceSqr.
Для пересечение двух сфер я использую
LineDistance distance = LineSegment.DistanceSqr(A, B, C, D);
float r2 = (a.Radius + a.Radius) * (b.Radius + b.Radius);
if (distance.DistanceSqr <= r2)
Vector3 moveDir = (B - A) * distance.T;
точка пересечения = A + moveDir;
Теперь эту точку я хочу сдвинуть на столько, что бы сфера касалась края отрезка CD и делаю:
A + moveDir - moveDir.normalized * Mathf.Sqrt(r2 - distance.DistanceSqr);
Все хорошо, когда отрезки перпендикулярны:
Но когда появляется угол между отрезками, расстояние становится не правильным:
У меня не получается решить данную проблему. Что нужно посчитать\дописать чтобы учитывать это смещение?
Вам по сути нужно найти расстояние между центром паралеллограмма-пересечения и центром касающейся окружности (и на это расстояние надо отступить назад от точки A + moveDir
).
Для этого рассмотрим подобные серые треугольники:
Вертикальные катеты у них равны соответствующим радиусам окружностей, а гипотенузы — тем же катетам, делённым на синус угла между отрезками.
Итого, расстояние, на которое нужно отойти назад, равно (a.Radius + b.Radius) / Mathf.Sin(alpha)
, где alpha
— угол между отрезками.
Синус угла можно найти как Mathf.Sqrt(1 - cosA * cosA)
, где double cosA = Vector3.Dot(B - A, D - C)
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как узнать ServiceName службы по ее исполняемому файлу? Те
Почему обычный С# Random не работает в Unity-скрипте? Пробую такой код для смены цветового канала по нажатию кнопки:
Есть у меня два объекта, у которых имеется свой Rectangle Как проверить что они столкнулись я знаю: