Ich suche nach einem einfachen Algorithmus, um gleichmäßig verteilte Punkte auf einer Ellipse zu zeichnen, wenn man die Haupt- und Nebenachse berücksichtigt. Mit einem Kreis wie diesem ist das wirklich einfach:
var numberOfPoints = 8;
var angleIncrement = 360 / numberOfPoints;
var circleRadius = 100;
for (var i = 0; i < numberOfPoints; i++) {
var p = new Point();
p.x = (circleRadius * Math.cos((angleIncrement * i) * (Math.PI / 180)));
p.y = (circleRadius * Math.sin((angleIncrement * i) * (Math.PI / 180)));
}
(wodurch Punkte erzeugt werden, die den gleichen Abstand zu ihren Nachbarpunkten haben), aber ich kann auf einer Ellipse keinen Weg finden oder herausfinden, dies zu tun. (Lösungen in AS3 bevorzugt, aber nicht erforderlich.)
mathematics
actionscript-3
Justin C. Runden
quelle
quelle
Antworten:
Parametrieren Sie es nach Bogenlänge neu und probieren Sie es gleichmäßig aus. Wenn Sie Hilfe beim Rechnen benötigen, würde ich Sie hier fragen:
https://math.stackexchange.com/
Es wurde auch hier gefragt: /mathpro/28070/finding-n-points-that-are-equidistant-around-the-circumference-of-an-ellipse
quelle
Angemessene Annäherung
Wie bereits in anderen Antworten erwähnt, gibt es keine genaue Möglichkeit, dies zu tun. Es ist jedoch möglich, eine Lösung effizient zu approximieren.
Meine Formel behandelt nur den oberen rechten Quadranten. Es müssen verschiedene Vorzeichenwechsel angewendet werden, um andere Quadranten zu handhaben.
Sei d Ihr gewünschter Bogenabstand zwischen aufeinanderfolgenden Punkten. Angenommen, der letzte geplottete Punkt liegt bei (x, y) .
Dann sollte der nächste Punkt an den folgenden Koordinaten aufgezeichnet werden:
Beweis
Der nächste Punkt sei bei (x + Δx, y + Δy) . Beide Punkte erfüllen die Ellipsengleichung:
Wenn Sie y in den Gleichungen loswerden, erhalten Sie :
Wir nehmen an, dass Δx klein genug ist, also ersetzen wir f (x + Δx) -f (x) durch f '(x) Δx unter Verwendung der linearen Näherung für f' :
Wenn d klein genug ist, sind Δx und Δy klein genug und die Bogenlänge liegt nahe am euklidischen Abstand zwischen den Punkten. Die folgende Annäherung ist daher gültig:
Wir ersetzen oben Δy und lösen nach Δx :
Was ist, wenn d nicht klein genug ist?
Wenn d zu groß ist für die oben genannten Annäherungen gültig zu sein, einfach ersetzen d mit d / N , zum Beispiel N = 3 , und nur einen Punkt aus plotten N .
Schlussbemerkung
Diese Methode hat Probleme bei Extrema ( x = 0 oder y = 0 ), die mit zusätzlichen Näherungen behoben werden können ( dh den letzten Punkt des Quadranten überspringen, unabhängig davon, ob er tatsächlich gezeichnet ist oder nicht).
Die Handhabung der gesamten Ellipse wird wahrscheinlich robuster sein, wenn das Ganze mit Polarkoordinaten wiederholt wird. Es ist jedoch eine Arbeit, und dies ist eine alte Frage, also werde ich es nur tun, wenn das Originalplakat Interesse zeigt :-)
quelle
Ich hänge irgendwie genau davon ab, was du mit "gleichmäßig" meinst. Ich habe hier einen Beitrag über die Verwendung von Ellipsen in meinem Spiel geschrieben: http://world-create.blogspot.com/2009/01/ellipse-maths.html
Aus der Post:
Sie können Punkte erhalten, die gleichmäßig um die Ellipse verteilt sind, indem Sie Folgendes tun:
Abhängig von den Besonderheiten Ihrer Ellipse können diese Werte jedoch zusammengefasst werden (wenn die Ellipse ein "spitzes" Ende aufweist).
quelle
Die Antwort, mit voller Java - Code wird auf Stackoverflow befindet sich hier
Beantwortet von:
bearbeitet 11. Dezember 13 um 4:14 John Paul
antwortete am 11. Dezember 13 um 3:48 Dave
quelle