Aproximação razoável
Como já foi dito em outras respostas, não há maneira exata de fazer isso. No entanto, é possível aproximar eficientemente uma solução.
Minha fórmula manipulará apenas o quadrante superior direito . Várias alterações de sinal precisarão ser aplicadas para lidar com outros quadrantes.
Seja d a distância desejada do arco entre pontos consecutivos. Suponha que o último ponto plotado esteja em (x, y) .
|
b +-------._ (x,y)
| `@-._
| `-.
| `.
| \
-+--------------------+--->
O| a
Em seguida, o próximo ponto deve ser plotado nas seguintes coordenadas:
x' = x + d / sqrt(1 + b²x² / (a²(a²-x²)))
y' = b sqrt(1 - x'²/a²)
Prova
Seja o próximo ponto em (x + Δx, y + Δy) . Ambos os pontos satisfazem a equação da elipse:
x²/a² + y²/b² = 1
(x+Δx)²/a² + (y+Δy)²/b² = 1
Livrar-se de y nas equações fornece:
Δy = b (sqrt(1 - (x+Δx)²/a²) - sqrt(1 - x²/a²))
Assumimos que Δx é pequeno o suficiente, então substituímos f (x + Δx) -f (x) por f '(x) Δx usando a aproximação linear para f' :
Δy = -bxΔx / (a² sqrt(1 - x²/a²))
Se d é pequeno o suficiente, então Δx e Δy são pequenos o suficiente e o comprimento do arco está próximo da distância euclidiana entre os pontos. A seguinte aproximação é, portanto, válida:
Δx² + Δy² ~ d²
Substituimos Δy acima e resolvemos para Δx :
Δx ~ d / sqrt(1 + b²x² / (a²(a²-x²)))
E se d não for pequeno o suficiente?
Se d for muito grande para as aproximações anteriores para ser válida, simplesmente substituir d com d / N , por exemplo, N = 3 , e só traçar um ponto de N .
Nota final
Este método tem problemas em extremos ( x = 0 ou y = 0 ), que podem ser tratados usando aproximações adicionais ( ou seja, pular o último ponto do quadrante, seja ele realmente plotado ou não).
O manuseio de toda a elipse provavelmente será mais robusto refazendo tudo usando coordenadas polares. No entanto, é um pouco de trabalho, e essa é uma pergunta antiga, então só o farei se houver algum interesse no pôster original :-)