Memindahkan objek di jalur melingkar

26

Saya ingin memindahkan satu objek (titik) di jalur melingkar. Bagaimana saya harus mengubah koordinat X dan Y untuk mencapai ini?

Ganapathy C
sumber

Jawaban:

54

Anda dapat melakukannya dengan menggunakan matematika sederhana:

X := originX + cos(angle)*radius;
Y := originY + sin(angle)*radius;

(originX, originY) adalah pusat dari lingkaran Anda. radius adalah radiusnya. Itu dia.

Ini bekerja karena sinus dan cosinus secara matematis terkait dengan lingkaran unit .

hubungan sinus dan kosinus ke satuan lingkaran
Kredit gambar: LucasVB (Pekerjaan sendiri) [Domain publik], melalui Wikimedia Commons . (Diperkecil hingga 70%.)

Krom Stern
sumber
Bagaimana jika itu oval? Yaitu tidak ada radius yang ditetapkan.
Tes
2
@test: Jika oval berorientasi X atau Y, Anda dapat melipatgandakan posisi sumbu yang sesuai dengan faktor tambahan. Jika Anda membutuhkan detail lebih lanjut, Anda harus mengajukan pertanyaan terpisah.
Kromster mengatakan mendukung Monica
@Anko: Saya tidak berpikir bahwa animasi menjelaskannya dengan lebih baik, tetapi biarkan saja, bagi mereka yang membutuhkannya. Dikonversi ke CW.
Kromster berkata mendukung Monica
@Romster bagaimana dengan mencapai hasil yang sama di ruang 3d?
Tomas
14

Anda dapat menggunakan persamaan parametrik seperti yang ditandai oleh Krom. Untuk memahami mengapa kami menggunakan rumus ini, Anda harus memahami persamaannya. Persamaan ini diturunkan dari persamaan parametrik lingkaran .

Mengingat lingkaran digambar dengan pusat pada titik asal (O) seperti yang ditunjukkan pada diagram di bawah ini Lingkaran

Jika kita mengambil titik "p" pada keliling lingkaran, memiliki jari-jari r.

Biarkan sudut yang dibuat oleh OP (Asal ke p) menjadi θ. Biarkan jarak p dari sumbu x menjadi y Biarkan jarak p dari sumbu y menjadi x

Dengan menggunakan asumsi di atas kita mendapatkan segitiga seperti yang ditunjukkan di bawah ini: segi tiga

Sekarang kita tahu bahwa cos θ = base / hypotenuse dan sin θ = tegak lurus / hypotenuse

yang memberi kita cos θ = x / r dan sin θ = y / r

:: x = r * cos θ dan y = r * sin θ

Tetapi jika lingkaran tidak pada titik asal dan lebih pada (a, b) maka kita dapat mengatakan bahwa pusat lingkaran digeser

a unit dalam sumbu x
b unit dalam sumbu y
Jadi untuk lingkaran seperti itu kita dapat mengubah persamaan parametrik sesuai dengan menambahkan pergeseran pada sumbu x dan y memberi kita persamaan berikut:

x = a + (r * cos θ)
y = b + (r * sin θ)


Di mana a & b adalah koordinat x, y dari pusat lingkaran.

Oleh karena itu kami menemukan x dan y koordinat titik pada keliling lingkaran dengan jari-jari r

fer0x
sumber
2
Terima kasih, jawaban yang sangat bagus dan singkat untuk masalah ini, acungan jempol
Ali.Ghodrat
5

Ada trik lain, di mana Anda menggunakan rumus dosa (x + a) dan cos (x + a), dan itu memungkinkan Anda menghitung dosa (a) dan cos (a) - menjadi sudut di mana Anda ingin memindahkan dari posisi Anda saat ini - hanya sekali dan lakukan penggandaan dan penambahan di setiap langkah.

sin (x + a) = sin (x) * cos (a) + cos (x) * sin (a), iirc.

Tentu saja, itu mengasumsikan kecepatan sudut konstan.

Waspadalah terhadap ketelitian aritmatika terbatas. Saya telah mengamati di masa lalu "gerakan melingkar" diimplementasikan sedemikian rupa sehingga akan menarik spiral sebagai hasil dari pembulatan yang berulang-ulang berulang kali. Mungkin perlu mengatur ulang posisi ke (x0, y0) setelah setiap revolusi.

sylvainulg
sumber