Пересечение между двумя трехмерными поверхностями

У меня есть две независимые 3D-фигуры; один квадрат, а другой конус.

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

Будет полезно, если кто-нибудь предложит алгоритм проверки, касается ли поверхность другой формы.

Я работаю с MATLAB, но основная логика будет оценена на любом языке, будет оценена.

https://in.mathworks.com/matlabcentral/answers/367565-findout-surface-to-surface-intersection-between-two-3d-shapes

1 ответ

Существует относительно простое решение, благодаря тому, что усеченный конус имеет выпуклую форму, и найти его AABB не так сложно.

Сначала поверните пространство так, чтобы куб выровнялся по оси (и конус в произвольном положении). Затем для нахождения AABB базы достаточно получить максимумы минимума координат, используя параметрическое уравнение C + R cos t + R' sin t, где C - вектор положения центра, а R, R'два ортогональных радиуса. Вы найдете предельные углы, отменив производную.

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

Сравнивая AABB с кубом, вы можете определить, какое расстояние остается до столкновения в любом направлении.

Другие вопросы по тегам