У меня есть источник света и отражающая поверхность. Мне нужно пересечь отражение и некоторую другую форму.
Для этого сначала я рассчитываю изображение источника на поверхность.
Затем я вычисляю, где отражение будет на плоскости поверхности цели.
Теперь мне нужно получить пересечение, здесь нарисованное с помощью программного обеспечения для редактирования изображений:
Итак, в В этой точке я сначала попытался спроецировать отраженный треугольник и обстрелянную поверхность на плоскость xy и передать 2D-точки в CGAL, и, похоже, он вычисляет точное пересечение. https://gist.github.com/engina/06c2018992d0297a2946dfec9ff31ae9
Но после того, как я получу точки пересечения от CGAL, мне нужно вернуть его обратно в правильные положения, что становится утомительно.
Интересно, Я могу передать CGAL 3D-точки поверхности и отраженной формы и получить 3d-точки пересечения.
ОБНОВЛЕНИЕ : в конечном итоге я решил и решил эту проблему в основном в пространстве пользователя ( не в пространстве CGAL).
Я повернул Polygon A (форма отраженного света на плоскости) и Polygon B (поверхность, которая мне нужна для пересечения со светом) на угол, чтобы они находятся в плоскости XY.
Я применил код в исходном сообщении, и CGAL вернул мне набор пересечений для этой плоскости.
Затем я создал форму пересечения и повернул ее на место. поворачивая его на угол.
Тем не менее, открывайте лучшие способы реализации этого, потому что все эти повороты и прочее выполняются с обычной арифметикой с плавающей точкой c, и я уверен, что я проигрываю некоторая точность (к счастью, в данном конкретном случае она мне не нужна).