2015-04-26 2 views
1

Я работаю над проблемой, которая должна произвольно генерировать и выставлять выпуклые многогранники в контейнер с кубом/цилиндром в случайно выбранных точках без перекрытия. Я использую , чтобы получить графический вывод.Как проверить, пересекаются ли два выпуклых многогранника друг с другом в Three.js?

A demo.

Ставя многогранник, как проверить, пересекает ли она с другими многогранников?

Приведенный выпуклый многогранник представляет собой просто тетраэдр или гексаэдр и построен с использованием THREE.ConvexGeometry. Поскольку мне нужна точная проверка, ограничительной рамки недостаточно, я просто использую ее, чтобы убедиться, что два многогранника не пересекаются.

Я провел много исследований и нашел много сложных теорий и методов, мне нужно получить логический результат, который говорит, существует ли пересечение между двумя выпуклыми многогранниками. SAT (Separating Axis Theorem) в 3D достаточно хорош, но Three.js, похоже, не в состоянии это сделать. Может ли кто-нибудь сказать мне, как сделать этот вид проверки простым способом или просто объяснить, как это сделать с SAT в 3D?

+0

Yo хочет точным, вы можете поместить оба объект в объект и сравнить обе вершины, нормали многоугольники позицию на everyframe? вам нужно будет циклически перебирать каждую вершину много раз и, возможно, добавить немного места, чтобы не было точно – Careen

+0

Нет необходимости быть точным на каждом кадре, мне просто нужно проверить в настоящий момент, что многоугольник создано. Когда пересечение найдено, мне нужно, чтобы это было точно. Я уверен, что [SAT] (http://www.dyn4j.org/2010/01/sat/) может сделать это как в 2d, так и в 3d, вы можете проверить это. @Careen –

+0

Но как я могу убедиться, что новая сетка не пересекается с существующими? Даже если новая случайная позиция и все вершины создаваемого многоугольника не находятся в одном из существующих полигонов, края многоугольника все же имеют шанс пересечь другие объекты. @Careen –

ответ

0

Вы можете посмотреть http://www.realtimerendering.com/intersections.html. Несмотря на то, что сайт с 2011 года, алгоритмы пересечения не изменились за последние годы. Из демонстрации кажется, что как только многогранники помещаются в куб, они не двигаются. Таким образом, алгоритм SAT не будет лучшим решением, так как он используется для перемещения многогранников.

0

Gilbert-Johnson-Keerthi - это мощный алгоритм, позволяющий измерять расстояние и проверять пересечение выпуклых многогранников. Тем не менее я считаю, что лучше использовать на простом многогранника противном случае вычисление в функции поддержки может занять некоторое время. Возможным недостатком является то, что вам нужно иметь функции, способные измерять расстояние между точкой и другой точкой/сегментом/треугольником, я не знаю, доступны ли некоторые из них в трёх.

http://en.wikipedia.org/wiki/Gilbert%E2%80%93Johnson%E2%80%93Keerthi_distance_algorithm

Смежные вопросы