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) .
|
b +-------._ (x,y)
| `@-._
| `-.
| `.
| \
-+--------------------+--->
O| a
Dann sollte der nächste Punkt an den folgenden Koordinaten aufgezeichnet werden:
x' = x + d / sqrt(1 + b²x² / (a²(a²-x²)))
y' = b sqrt(1 - x'²/a²)
Beweis
Der nächste Punkt sei bei (x + Δx, y + Δy) . Beide Punkte erfüllen die Ellipsengleichung:
x²/a² + y²/b² = 1
(x+Δx)²/a² + (y+Δy)²/b² = 1
Wenn Sie y in den Gleichungen loswerden, erhalten Sie :
Δy = b (sqrt(1 - (x+Δx)²/a²) - sqrt(1 - x²/a²))
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' :
Δy = -bxΔx / (a² sqrt(1 - x²/a²))
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:
Δx² + Δy² ~ d²
Wir ersetzen oben Δy und lösen nach Δx :
Δx ~ d / sqrt(1 + b²x² / (a²(a²-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 :-)