Вы можете облегчить вашу проблему, сократив количество квадов, с которыми вам приходится иметь дело.
Вы знаете, что некоторые из четырехугольников образуют замкнутую оболочку. Следовательно, эти квадраты соединены по краям. Если три взаимно смежных ребра четырехугольника (то есть ребра образуют замкнутый контур) перекрывают ребро другого квада, то эти квады могут быть частью оболочки (эти взаимно смежные ребра служат границей 2D-области; Назовите этот регион "связным лицом" четырехугольника). Составьте список этих «кандидатов в оболочку». Теперь просмотрите этот список и отбросьте любого кандидата, у которого есть ребро, которое не перекрывается с другим кандидатом (то есть ребро перекрывает ребро четырехугольника, которого нет в списке). Повторяйте этот процесс отбраковки, пока вы больше не сможете удалить любые квады. То, что вы оставили, должно быть вашей оболочкой. Создайте список «без оболочки», содержащий все квады, которых нет в списке «оболочки».
Нарисуйте ограничивающую рамку (или сферу, эллипс и т. Д.) Вокруг этой оболочки. Теперь просмотрите список квадроциклов, не относящихся к оболочке, и выкиньте все квады, которые лежат за пределами ограничивающей области. Их точно нет в интерьере.
Возьмите оставшиеся четверки без оболочки. Они могут или не могут быть внутри формы. Для каждого из этих четырехугольников нарисуйте линии, перпендикулярные четырехугольному от центра каждой грани, которые заканчиваются на поверхности ограничивающей фигуры. Проследите каждую линию и посчитайте, сколько раз линия пересекает «связное лицо» четырехугольника в вашем списке оболочки. Если это число нечетное, то эта вершина находится внутри фигуры. Если оно четное, вершина находится снаружи. Вы можете определить, находится ли четырехугольник внутри или снаружи, в зависимости от того, находятся ли его вершины внутри или снаружи.