Approssimazione ragionevole
Come già affermato in altre risposte, non esiste un modo esatto per farlo. Tuttavia, è possibile approssimare in modo efficiente una soluzione.
La mia formula gestirà solo il quadrante in alto a destra . Varie modifiche ai segni dovranno essere applicate per gestire altri quadranti.
Sia d la distanza dell'arco desiderata tra punti consecutivi. Supponiamo che l'ultimo punto tracciato sia in (x, y) .
|
b +-------._ (x,y)
| `@-._
| `-.
| `.
| \
-+--------------------+--->
O| a
Quindi il punto successivo dovrebbe essere tracciato alle seguenti coordinate:
x' = x + d / sqrt(1 + b²x² / (a²(a²-x²)))
y' = b sqrt(1 - x'²/a²)
Prova
Lascia che il punto successivo sia su (x + Δx, y + Δy) . Entrambi i punti soddisfano l'equazione dell'ellisse:
x²/a² + y²/b² = 1
(x+Δx)²/a² + (y+Δy)²/b² = 1
Sbarazzarsi di y nelle equazioni dà:
Δy = b (sqrt(1 - (x+Δx)²/a²) - sqrt(1 - x²/a²))
Supponiamo che Δx sia abbastanza piccolo, quindi sostituiamo f (x + Δx) -f (x) con f '(x) Δx usando l' approssimazione lineare per f' :
Δy = -bxΔx / (a² sqrt(1 - x²/a²))
Se d è abbastanza piccolo, allora Δx e Δy sono abbastanza piccoli e la lunghezza dell'arco è vicina alla distanza euclidea tra i punti. È pertanto valida la seguente approssimazione:
Δx² + Δy² ~ d²
Sostituiamo Δy in quanto sopra e risolviamo per Δx :
Δx ~ d / sqrt(1 + b²x² / (a²(a²-x²)))
E se d non fosse abbastanza piccolo?
Se d è troppo grande per le approssimazioni sopra siano validi, è sufficiente sostituire d con d / N , ad esempio N = 3 , e solo tracciare un punto su N .
Nota finale
Questo metodo presenta problemi a extrema ( x = 0 o y = 0 ), che possono essere trattati usando approssimazioni aggiuntive ( cioè saltando l'ultimo punto del quadrante, che sia effettivamente tracciato o meno).
Gestire l'intera ellisse sarà probabilmente più robusto rifacendo il tutto usando le coordinate polari. Tuttavia, è un po 'di lavoro, e questa è una vecchia domanda, quindi lo farò solo se c'è qualche interesse dal poster originale :-)