Algorithmus zum Konstruieren der Ecken eines regulären n-seitigen Polygons


10

Ich habe dies mit vielen Schlüsselwortkombinationen gegoogelt, aber zu meiner großen Überraschung konnte ich keinen Algorithmus finden, um ein reguläres n-seitiges Polygon in einen bestimmten Kreis zu konstruieren, dh die Koordinaten für die n Eckpunkte zu finden. Alles, was ich finden konnte, waren Anweisungen, wie man es mit physischem Kompass und Lineal macht, oder interaktive Browser-Plug-Ins ohne Quelle.

Wo könnte ich einen solchen Algorithmus finden?


2
Lassen Sie mich Ihr Vertrauen in Google wiederherstellen. ;-) Vierter Treffer für "Algorithmus reguläres Polygon": gamedev.net/topic/… " Wählen Sie dann unter Verwendung der grundlegenden Trigonometrie n Punkte aus, die äquidistant um den Kreisumfang verteilt sind (dh - wenn n 3 ist, wählen Sie 3 Punkte auf dem Umfang, der 120 Grad voneinander entfernt ist). " Welches ist genau das, was Kevins Code tut.
Eric

Antworten:


15

Mit ivon 0 to n-1inklusive gehen:

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

Bearbeiten: Wie Lars Viklund in den Kommentaren erwähnt hat, ist dies nur in Sprachen wie Javascript sicher, in denen die Ganzzahldivision eine Gleitkommazahl anstelle einer Ganzzahl zurückgibt. In anderen Sprachen sollten Sie zuerst ieinen Float verwenden.


3
Beachten Sie die Falle der integralen Division in i / n in Sprachen, in denen das Teilen von ganzen Zahlen eine ganze Zahl ergibt.
Lars Viklund

Aah ein sehr guter Punkt, ich werde diese Einschränkung in der Antwort hinzufügen.
Elva

Dies ist selbstverständlich, aber Sie möchten sich auch vor dem Fall schützen, in dem n * 2 * PI == 0Sie ein unglückliches Polygon haben :(.
Zack The Human

Abgesehen von seltsamen Überläufen ist das einzige n, an das n * 2 * PI == 0ich denken kann, 0, was meines Wissens undefiniert ist, genau wie i / 0. Also kein Problem, oder? :)
Elva
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.