В алгоритме quickhull необходимо построить конус на множестве ребер.
Ребро считается субимплексом с удалением одной вершины.Требуется, чтобы добавление вершины к ребру образовало симплекс, как если бы эта вершина была просто заменена.
Например, при хранении симплексов в виде списков вихрей, для треугольника, определенного с вершиной {p0, p1ребра, p2}: {p1, p2}, {p2, p0}, {p0, p1} - в этом порядке индекса.Теперь, при добавлении новой вершины p в конец списка вершин ребра, новые треугольники: {p1, p2, p}, {p2, p0, p}, {p0, p1, p} Они имеют ту же ориентацию, как если бы они были оригинальнымиТреугольник был наклонен.
Для треугольника ребро, противоположное р1, имеет обратный порядок остальных вершин.Для тетраэдра, это для p0 и p2.
Каков правильный способ хранения ребер или правильный способ выяснить, когда нужно изменить порядок вершин?
Хорошо.В общем случае хранения вершины set недостаточно для представления симплекса, если его ориентация имеет значение.Один и тот же набор может представлять эквивалентные симплексы с разным знаком объема. список может сохранять ориентацию, но нетривиально извлечь его только из порядка.Таким образом, ни множества, ни списки сами по себе не являются хорошим решением (для представления как симплекса, так и его ребер).