Первый алгоритм предназначен для триангуляции замкнутой ломаной.
Он основан на полном переборе различных вариантов триангуляции и выборе из них лучшего варианта.
Лучшим считается тот вариант, у которого будет наименьшая суммарная площадь треугольников.
Этот подход имеет физический смысл. Например, мыльная плёнка, натянутая на проволочный каркас произвольной формы,
имеет минимальную по площади поверхность.
DynArrRef< Set3<nat> > & trian ( CArrRef<Vector3d> vert, DynArrRef< Set3<nat> > & res ); Исходными данными являются: ссылка на массив вершин ломаной и ссылка на массив, куда будет записываться результат ( эта же ссылка и возращается ). Треугольник описывается тремя целыми числами, которые являются индексами массива вершин. Иногда нужно соединить две ломаные в пространстве ( замкнутые или незамкнутые одновременно )
треугольниками так, чтобы каждый треугольник касался обеих линий. Среди множества вариантов
выберем тот, у которого суммарная площадь минимальна.
DynArrRef< Set3<nat> > & trian ( CArrRef<Vector3d> vert1, CArrRef<Vector3d> vert2, bool isCycle, DynArrRef< Set3<nat> > & res );Здесь vert1 и vert2 - ломаные, заданные своими вершинами. Если isCycle = true - ломаные считаются замкнутыми и результирующая поверхность будет замкнута в кольцо. res - массив результирующих треугольников, заданных индексами вершин из ломаных vert1 и vert2. Номер индекса от 0 до n1-1 задает точку из vert1, а номер индекса от n1 до n1+n2-1 задает точку из vert2. n1 и n2 должны быть больше 1. Размер массива res будет равен n1 + n2, если isCycle = true и n1 + n2 - 2, если isCycle = false. В приложении DEMO можно посмотреть на результаты этих триангуляций. Описание шаблонов классов CArrRef и DynArrRef находится здесь.
|