Ответ "для n_sides:" является самым простым. Для парня, который предложил, чтобы вы могли упростить вычисления, используя комплексные числа, почти во всех математических библиотеках есть основанные на таблицах подпрограммы cos () и sin () с эффективной интерполяцией, поэтому нет необходимости углубляться в относительно неясные решения. Обычно обычный n-gon может быть инициализирован и аппаратное масштабирование OpenGL используется для масштабирования / преобразования его для любого конкретного экземпляра.
Если вы хотите быть хардкорным, предварительно сгенерируйте все n-угоны, которые вам нужны, и загрузите их в буферы вершин.
В качестве отступления, вот вышеприведенное решение в Lua. Он просто выводит координаты, но вы, конечно, можете вернуть координаты в массив / таблицу. Возвращенные координаты можно использовать для инициализации примитива сетки OpenGL GL_LINE_LOOP.
require 'math'
-- computes coordinates for n-sided, regular polygon of given radius and start angle
-- all values are in radians
function polypoints(sides, radius, start)
local x_center = 0.0
local y_center = 0.0
local angle = start
local angle_increment = 2 * math.pi / sides
local x=0.0
local y=0.0
print(string.format("coordinates for a %d sided regular polygon of radius %d\nVertex",sides,radius),"X"," ","Y")
for i=1,sides do
x = x_center + radius * math.cos(angle)
y = y_center + radius * math.sin(angle)
print(string.format("%d\t%f\t%f",i,x,y))
angle = angle + angle_increment
end
end
-- Generate a regular hexagon inscribed in unit circle
polypoints(6, 1.0, 0.0)