Saya mencari algoritma sederhana untuk merencanakan titik-titik yang terdistribusi secara merata pada sebuah elips, mengingat sumbu utama dan minor. Ini sangat mudah dilakukan dengan lingkaran seperti:
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)));
}
(yang menciptakan titik yang jaraknya sama dengan titik tetangganya) tetapi saya tidak dapat menemukan atau mencari cara untuk melakukan ini pada elips. (Solusi di AS3 lebih disukai, tetapi tidak diperlukan.)
mathematics
actionscript-3
Justin C. Rounds
sumber
sumber
Jawaban:
Parameterisasi ulang dengan panjang busur dan sampel seragam. Jika Anda perlu bantuan melakukan perhitungan, saya akan bertanya di sini:
https://math.stackexchange.com/
itu juga ditanyakan di sini: /mathpro/28070/finding-n-points-that-are-equidistant-around-the-circumference-of-an-ellipse
sumber
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) .
Kemudian titik selanjutnya harus diplot pada koordinat berikut:
Bukti
Biarkan titik berikutnya berada di (x + Δx, y + Δy) . Kedua poin memenuhi persamaan elips:
Menyingkirkan y dalam persamaan memberi:
Kami menganggap Δx cukup kecil, jadi kami mengganti f (x + Δx) -f (x) dengan f '(x) Δx menggunakan pendekatan linier untuk f' :
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:
Kami mengganti iny di atas dan menyelesaikan untuk Δ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 :-)
sumber
Saya jenis tergantung persis apa yang Anda maksud dengan "merata". Saya menulis posting tentang menggunakan elips di permainan saya di sini: http://world-create.blogspot.com/2009/01/ellipse-maths.html
Dari pos:
Anda bisa mendapatkan titik yang ditempatkan secara merata di sekeliling elips dengan sudut dengan melakukan:
Tetapi tergantung pada spesifikasi elips Anda, nilai-nilai ini dapat dikumpulkan (jika ada ujung "runcing" ke elips).
sumber
Jawabannya, dengan kode Java lengkap terletak di StackOverflow di sini
Dijawab oleh:
diedit 11 Des '13 jam 4:14 John Paul
jawab 11 Des 13 pada 3:48 Dave
sumber