Algoritmo para construir os cantos de um polígono regular de n lados

10

Pesquisei isso usando muitas combinações de palavras-chave, mas, para minha grande surpresa, não consegui encontrar um algoritmo para construir um polígono regular de n lados em um dado círculo, ou seja, encontrar as coordenadas para os n pontos de canto. Tudo o que pude encontrar foram instruções sobre como fazê-lo através de bússola física e régua ou plug-ins interativos de navegador sem fonte.

Então, onde eu poderia encontrar esse algoritmo?

Hackworth
fonte
2
Deixe-me restaurar sua fé no Google. ;-) Quarto resultado para "polígono regular do algoritmo": gamedev.net/topic/… "Então, usando a trigonometria básica, escolha n pontos espaçados equidistantemente ao redor da circunferência do círculo (ou seja - se n for 3, escolha 3 pontos no circunferência que estão 120 graus um do outro) ". Qual é exatamente o que o código de Kevin faz.
Eric

Respostas:

15

Com ia 0 to n-1inclusão do inclusivo:

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

Edit: Como Lars Viklund mencionou nos comentários, isso só é seguro em idiomas como o javascript, em que a divisão inteira retorna um número de ponto flutuante em vez de um número inteiro. Em outros idiomas, você deve primeiro converter ium float.

Elva
fonte
3
Cuidado com a armadilha da divisão integral em i / n nos idiomas em que a divisão de números inteiros produz um número inteiro.
Lars Viklund
Aah, um argumento muito bom, acrescentarei essa ressalva na resposta.
Elva
Isso é óbvio, mas você também vai querer se proteger contra o caso em que n * 2 * PI == 0ou terá um polígono infeliz :(.
Zack The Human
Salvo excedentes estranhos, o único n com o qual n * 2 * PI == 0consigo pensar é 0, que, até onde sei, é indefinido, o mesmo que i / 0. Portanto, não há problema, certo? :)
Elva