Алгоритм построения углов правильного, n-стороннего многоугольника


10

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

Так, где я мог найти такой алгоритм?


2
Позвольте мне восстановить вашу веру в Google. ;-) Четвертый удар по «алгоритму правильного многоугольника»: gamedev.net/topic/… «Затем, используя базовую тригонометрию, выбрал n точек, расположенных на одинаковом расстоянии по окружности круга (то есть - если n равно 3, выберите 3 точки на окружности, которые на 120 градусов друг от друга). " Именно это и делает код Кевина.
Эрик

Ответы:


15

С iвыходом из 0 to n-1включительно:

pointX[i] = ( sin( i / n * 2 * PI ) * radius ) + xOffset;
pointY[i] = ( cos( i / n * 2 * PI ) * radius ) + yOffset;

Редактировать: Как отметил Ларс Виклунд в комментариях, это безопасно только в таких языках, как javascript, в которых целочисленное деление возвращает число с плавающей запятой, а не целое число. На других языках вы должны сначала бросить iна поплавок.


3
Остерегайтесь ловушки интегрального деления в i / n в языках, где деление целых чисел дает целое число.
Ларс Виклунд

Ааа, очень хороший момент, я добавлю эту оговорку в ответ.
Эльва

Это само собой разумеется, но вы также хотите защититься от случая, когда n * 2 * PI == 0или у вас будет один несчастный многоугольник :(.
Зак Человек

За исключением странных переполнений, единственное число n, о котором n * 2 * PI == 0я могу думать, это 0, что, насколько я знаю, не определено, так же, как i / 0. Так что нет проблем, верно? :)
Эльва
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.