А мне нравится такое на комплексных числах считать. То же, что и с синусами, но элегантнее.
Вот пример на питоне:
from math import e, pi
f=lambda c, r, n=3, fi0=0: [c+r*e**(1j*(2*pi/n*i+fi0)) for i in range(n)]
Получим функцию
f
которая может рассчитать точки любого вписанного n-угольника:
>>> f(c=250+250j, r=250)
[(500+250j),
(375+466.50635094610965j),
(125.00000000000006+466.5063509461097j),
250.00000000000003j,
(124.99999999999989+33.49364905389041j),
(374.99999999999983+33.49364905389024j)]
А если надо обяательно кортежами, а не комплексными точками. то вот:
>>> [(round(p.real), round(p.imag)) for p in f(c=250+250j, r=250, n=5, fi0=pi/2)]
[(250, 500), (12, 327), (103, 48), (397, 48), (488, 327)]
Тут, заметьте, пятиугольник, причем вершинкой вниз (при оси Y, направленной вниз).
Чтобы было понятно как это работает...
Представим, что центр окружности в нуле координат. Нам нужно 6 точек, смещенных относительно нуля на радиус под нужными углами: 0, 60, 120, 180, 240 и 300 градусов. В формулах мы. конечно используем радианы: pi - это 180 градусов.
Чтобы повернуть единичный вектор на какой-то угол, нужно его просто домножить на e в степени мнимая единица, умноженная на угол. Поскольку единичный вектор на комплексной плоскости это просто 1, то его даже писать не надо. Просто возводим e в нужную степень и получаем нужный вектор в виде комплексного числа. Осталось его домножить на требуемый радиус (он при этом удлинится: был длиной 1, а станет r) и добавить к нему желаемый центр (тоже в виде комплексного числа, где реальная часть - X, а мнимая - Y).
Вот и всё!
Красота же?..
Да, забыл сказать, что если нужно повернуть весь n-угольник на какой-то угол, то для этого есть там параметр fi0, который по умолчанию ноль.
c - это координаты центра в комплексной форме. Например если X=30, а Y=40, то c=30+40j.
n - это число вершин.
r - радиус.
И да, в javascript'е нет такого элегантного способа работать с комплексными числами, как в питоне. Но для js есть много библиотек для работы с комплексными числами. Будет не так компактно и красиво, как на питоне, но в целом всё точно так же в плане математики.
UPD: Исправил функцию. Там скобочек не хватало, поэтому поворот на fi0 работал неверно. Теперь все как надо.