Если все узлы многогранника (могут быть невыпуклыми) и их координаты известны, точки грани задаются по порядку (против часовой стрелки или по часовой стрелке вокруг внешней нормали), как получить вектор внешней нормали каждого лицо?
Вот метод для выпуклого многогранника:
Вычисление нормалей и обмоток лица
Как насчет общего многогранника, который может быть невыпуклым?
Вот один из методов. Зафиксируйте ориентацию одной грани F0 вашего многогранника п. Вы еще не знаете, если это
против часовой стрелки снаружи, так что правое правило дает
направленная наружу нормаль от перекрестного произведения.
Теперь сориентируем соседнюю грань F1, чтобы она была совместима с ориентацией F0, в этом
общее ребро ориентировано → в F0 и ← в F1. Продолжать пропаганду
ориентации лица до каждого лица п согласуется с F0. Так что теперь все нормали
либо указывают внутрь, либо все указывают наружу.
Теперь вычислите объем п суммируя подписанные тома тетраэдров. Громкость
будет положительным, если все грани ориентированы против часовой стрелки, и отрицательным
если все по часовой стрелке. Если получится отрицательный результат, поменяйте ориентацию лица.
Вычисление подписанного тома происходит по всему Интернету, в том числе здесь:
Вычислительная геометрия в C.
Других решений пока нет …