Algorytm do konstruowania narożników regularnego wielokąta

10

Przeszukałem to za pomocą wielu kombinacji słów kluczowych, ale ku mojemu wielkiemu zaskoczeniu nie mogłem znaleźć algorytmu do konstruowania regularnego wielokąta w danym okręgu, tj. Znajdowania współrzędnych dla n punktów narożnych. Jedyne, co mogłem znaleźć, to instrukcje, jak to zrobić za pomocą kompasu fizycznego i prostej lub interaktywnych wtyczek do przeglądarek bez źródła.

Gdzie więc mogę znaleźć taki algorytm?

Hackworth
źródło
2
Pozwól mi przywrócić Twoją wiarę w Google. ;-) Czwarte trafienie dla „algorytmu regularnego wielokąta”: gamedev.net/topic/… „Następnie, używając podstawowej trygonometrii, wybrałem n punktów rozmieszczonych w równych odległościach na obwodzie koła (tj. - jeśli n jest 3, wybierz 3 punkty na obwód, który jest od siebie oddalony o 120 stopni). ” To właśnie robi kod Kevina.
Eric

Odpowiedzi:

15

Z iprzejściem od 0 to n-1włącznie:

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

Edycja: Jak wspomniał Lars Viklund w komentarzach, jest to bezpieczne tylko w językach takich jak javascript, w których dzielenie liczb całkowitych zwraca liczbę zmiennoprzecinkową, a nie liczbę całkowitą. W innych językach najpierw powinieneś rzucić ina float.

Elva
źródło
3
Uważaj na pułapkę integralnego dzielenia w i / n w językach, w których dzielenie liczb całkowitych daje liczbę całkowitą.
Lars Viklund
Ach, bardzo dobra uwaga, dodam to zastrzeżenie w odpowiedzi.
Elva
Jest to oczywiste, ale będziesz też chciał uchronić się przed przypadkiem, w którym n * 2 * PI == 0lub będziesz mieć jeden nieszczęśliwy wielokąt :(.
Zack The Human
Wyłączając dziwne przepełnienia, jedyną n, o n * 2 * PI == 0której mogę myśleć, jest 0, co, o ile wiem, jest niezdefiniowane, tak samo jak i / 0. Więc nie ma problemu, prawda? :)
Elva