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.