Algorithme de construction des coins d'un polygone régulier à n côtés


10

J'ai googlé cela en utilisant beaucoup de combinaisons de mots clés, mais à ma grande surprise, je n'ai pas pu trouver d'algorithme pour construire un polygone régulier à n côtés dans un cercle donné, c'est-à-dire trouver les coordonnées des n points d'angle. Tout ce que j'ai pu trouver, ce sont des instructions sur la façon de le faire avec une boussole physique et une règle, ou des plug-ins de navigateur interactifs sans source.

Alors, où pourrais-je trouver un tel algorithme?


2
Permettez-moi de restaurer votre confiance dans Google. ;-) Quatrième hit pour "polygone régulier d'algorithme": gamedev.net/topic/… "Ensuite, en utilisant la trigonométrie de base, choisissez n points espacés de manière équidistante autour de la circonférence du cercle (c'est-à-dire - si n est 3, choisissez 3 points sur le circonférence distante de 120 degrés) ". C'est exactement ce que fait le code de Kevin.
— Eric

Réponses:


15

En ipassant de l' 0 to n-1inclus:

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

Edit: Comme Lars Viklund l'a mentionné dans les commentaires, cela n'est sûr que dans des langues comme javascript dans lesquelles la division entière renvoie un nombre à virgule flottante plutôt qu'un entier. Dans d'autres langues, vous devez d'abord lancer iun flotteur.


3
Méfiez-vous du piège de la division intégrale en i / n dans les langues où la division d'entiers donne un entier.
— Lars Viklund

Aah un très bon point, je vais ajouter cette mise en garde dans la réponse.
— Elva

Cela va sans dire, mais vous voudrez également vous prémunir contre le cas où n * 2 * PI == 0ou vous aurez un polygone malheureux :(.
— Zack The Human

À moins de débordements étranges, le seul n avec n * 2 * PI == 0lequel je puisse penser est 0, ce qui, pour autant que je sache, n'est pas défini, comme i / 0. Donc, pas de problème, non? :)
— Elva
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.