Perkiraan yang masuk akal
Seperti yang sudah dinyatakan dalam jawaban lain, tidak ada cara pasti untuk melakukan ini. Namun, adalah mungkin untuk memperkirakan solusi secara efisien.
Formula saya hanya akan menangani kuadran kanan atas . Berbagai perubahan tanda perlu diterapkan untuk menangani kuadran lain.
Biarkan d menjadi jarak busur yang Anda inginkan antara titik-titik berturut-turut. Misalkan titik diplot terakhir adalah pada (x, y) .
|
b +-------._ (x,y)
| `@-._
| `-.
| `.
| \
-+--------------------+--->
O| a
Kemudian titik selanjutnya harus diplot pada koordinat berikut:
x' = x + d / sqrt(1 + b²x² / (a²(a²-x²)))
y' = b sqrt(1 - x'²/a²)
Bukti
Biarkan titik berikutnya berada di (x + Δx, y + Δy) . Kedua poin memenuhi persamaan elips:
x²/a² + y²/b² = 1
(x+Δx)²/a² + (y+Δy)²/b² = 1
Menyingkirkan y dalam persamaan memberi:
Δy = b (sqrt(1 - (x+Δx)²/a²) - sqrt(1 - x²/a²))
Kami menganggap Δx cukup kecil, jadi kami mengganti f (x + Δx) -f (x) dengan f '(x) Δx menggunakan pendekatan linier untuk f' :
Δy = -bxΔx / (a² sqrt(1 - x²/a²))
Jika d cukup kecil, maka Δx dan Δy cukup kecil dan panjang busur dekat dengan jarak euclidian antara titik-titik. Karenanya, perkiraan berikut ini valid:
Δx² + Δy² ~ d²
Kami mengganti iny di atas dan menyelesaikan untuk Δx :
Δx ~ d / sqrt(1 + b²x² / (a²(a²-x²)))
Bagaimana jika d tidak cukup kecil?
Jika d terlalu besar untuk perkiraan di atas akan berlaku, cukup mengganti d dengan d / N , misalnya N = 3 , dan hanya merencanakan satu titik dari N .
Catatan akhir
Metode ini memiliki masalah pada ekstrema ( x = 0 atau y = 0 ), yang dapat ditangani dengan menggunakan perkiraan tambahan ( mis. Melewatkan titik terakhir kuadran, apakah itu sebenarnya diplot atau tidak).
Menangani seluruh elips mungkin akan lebih kuat dengan mengulang semuanya menggunakan koordinat kutub. Namun, ini pekerjaan, dan ini adalah pertanyaan lama, jadi saya hanya akan melakukannya jika ada minat dari poster aslinya :-)