На предыдущем этапе
работы были поставлены некоторые требования к задаче триангуляции
прямоугольника, а именно:
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 часть
и выдвинуты следующие задачи.