CircleDrawer [ДЕМО]
Программа для рисования разноцветных кругов идеальной формы. Просто нарисуйте круг и он станет идеальным :)
Принцип работы программы основан на построении выпуклой оболочки вокруг точек введенных пользователем при рисовании. После того как будет получена оболочка, находится ее радиус, в центре которого рисуется окружность с радиусом равным половине диаметра оболочки.
Для построения выпуклой оболочки используется Andrew's monotone chain convex hull algorithm, вычислительная сложность которого составляет O(n log n) и является достаточной для построения кругов даже на основе очень сложных фигур введенных пользователем. Сложность нахождения диаметра оболочки составляет O(n), таким образом итоговая сложность алгоритма O(n log n).
Код построения оболочки и нахождения диаметра взят отсюда и портирован с Python на Javascript