Алгоритм ограничения движущейся точки на трехмерной поверхности

Я не совсем уверен, с чего начать поиск информации по этому вопросу, поэтому я спрашиваю здесь. Надеюсь, это не слишком общее. Я написал библиотеку частиц на C ++ и пытаюсь добавить возможность ограничения частиц на поверхность меша. Хотя это не жесткое ограничение — я хочу, чтобы частицы могли скользить по поверхности под воздействием сил.

Итак, представьте, что у меня есть произвольная вогнутая сетка с n треугольными гранями. Тогда у меня есть 3d-точка (частица), расположенная на одной из граней. Примените направленную силу к этой частице, чтобы заставить ее двигаться, но я хочу, чтобы она двигалась по топологии поверхности, а не просто двигалась линейно в пространстве. Он должен плавно перемещаться по поверхности и всегда касаться треугольника сетки.

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

Затем я подумал о том, чтобы проверить его барицентрические координаты и использовать их, чтобы определить, на какой соседний треугольник он должен перейти, если он выходит за пределы своего текущего треугольника … но это кажется чрезвычайно неэффективным решением, пронизанным другими проблемами (например, если сила перемещает частицу за границы всех соседних треугольников).

Затем я подумал об использовании координат UVW, чтобы выяснить, куда будет двигаться частица, но это тоже не сработало.

Есть идеи?

Вот изображение, которое поможет проиллюстрировать проблему:

введите описание изображения здесь

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]