Решение задачи триангуляции прямоугольника и круга

На предыдущем этапе работы были поставлены некоторые требования к задаче триангуляции прямоугольника, а именно:

1.      Как можно точнее приблизить границу области

2.      Треугольники должны быть ближе к равносторонним и, желательно, одного размера

В качестве решения этих требований было выдвинуто несколько предположений и за основу взята одна из них:

1.      В массив точек добавить четыре точки с определенными координатами углов этого прямоугольника, а затем добавлять в массив определенное количество точек со случайными координатами

Данный способ решает задачу приближения границы области, но не решает вторую

2.      Значительно увеличить количество точек в массиве

При данном способе обе задачи решаются частично, но не в полной мере, к тому же, значительно увеличивается время триангуляции

3.      Добавлять точки в массив с определенным шагом(интервалом)

Этот метод решает два выдвинутых требования и поэтому был выбран в качестве основного, результат представлен на рисунке ниже

            


Рисунок 1 -«Триангуляция прямоугольника с определенным шагом равным 60»


Рисунок 2 -«Функция для добавления точек в прямоугольник»

    Параметр stepRectangle -это шаг, который задаётся в форме ввода на странице

Рисунок 3 -«Поля ввода данных» 

Изначальный результат:

Рисунок 4 -«Триангуляция прямоугольника со случайным набором точек» 

Исходя из этого, можно сделать вывод о том, что требования, выдвинутые к предыдущей задаче, были решены. Также была поставлена ещё одна задача - триангуляция круга.

            Эта задача решена частично и поиск лучшего алгоритма ещё продолжается, результат разбиения представлен на рисунке 5:

Рисунок 5 -«Триангуляция круга» 

Функция добавления точек на окружность

Рисунок 6 -«Функция триангуляции круга»

            Алгоритм: сначала в массив точек(pointsForCircle) добавляется точка с координатами центра круга, далее циклом нужно пройтись по окружности, чтобы добавить точки на окружность.

Координаты точек X, Y вычисляются по формулам:

X = R * cos(phi)

Y = R * sin(phi)

Где R-радиус окружности, a phi - шаг

Результат, к которому нужно стремиться:

Рисунок 7 -«Пример триангуляции круга»

 

Вывод:

    Выдвинутые на предыдущем шаге требования к решаемой задаче были выполнены, также частично была решена задача разбиения круга, к проекту добавлена back-end часть и выдвинуты следующие задачи.