2D Регуляризованные Булевы Сет-Операции на трехмерном пространстве - PullRequest
0 голосов
/ 17 января 2020

У меня есть источник света и отражающая поверхность. Мне нужно пересечь отражение и некоторую другую форму.

enter image description here

Для этого сначала я рассчитываю изображение источника на поверхность. enter image description here

Затем я вычисляю, где отражение будет на плоскости поверхности цели. enter image description here

Теперь мне нужно получить пересечение, здесь нарисованное с помощью программного обеспечения для редактирования изображений: enter image description here

Итак, в В этой точке я сначала попытался спроецировать отраженный треугольник и обстрелянную поверхность на плоскость xy и передать 2D-точки в CGAL, и, похоже, он вычисляет точное пересечение. https://gist.github.com/engina/06c2018992d0297a2946dfec9ff31ae9

Но после того, как я получу точки пересечения от CGAL, мне нужно вернуть его обратно в правильные положения, что становится утомительно.

Интересно, Я могу передать CGAL 3D-точки поверхности и отраженной формы и получить 3d-точки пересечения.

ОБНОВЛЕНИЕ : в конечном итоге я решил и решил эту проблему в основном в пространстве пользователя ( не в пространстве CGAL).

Я повернул Polygon A (форма отраженного света на плоскости) и Polygon B (поверхность, которая мне нужна для пересечения со светом) на угол, чтобы они находятся в плоскости XY.

Я применил код в исходном сообщении, и CGAL вернул мне набор пересечений для этой плоскости.

Затем я создал форму пересечения и повернул ее на место. поворачивая его на угол.

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

...