Saya sedang mengerjakan dial yang berputar di sekitar lingkaran.
Dial ini harus memungkinkan Anda bergerak di mana saja dalam lingkaran untuk menyesuaikan posisi dial ke titik pada lingkaran dengan sudut yang sama dengan klik. Misalnya, dari tombol di atas jika Anda mengklik tempat yang ditunjukkan dengan warna merah muda di bawah, saya akan memindahkan tombol di atas titik itu tetapi pada lingkaran.
Saya tahu cara mendapatkan posisi titik pada lingkaran yang diberi jari-jari dan sudut (dalam radian). Itulah rumus ini :
x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;
Namun, saya ingin melakukan yang sebaliknya - Saya punya titik klik, yang ingin saya ubah menjadi titik pada lingkaran (tempat tombol kontrol berada). Saya mencoba menggunakan titik ini (dan radius yang diberikan) untuk mengetahui sudut dalam radian untuk itu, sehingga saya dapat menempatkan tombol kontrol pada lingkaran di sudut yang sama.
Apakah ada formula praktis yang bisa saya gunakan untuk mencapai ini?
sumber
atan
adalah kependekan dariarctan
, danatan2
hanya fungsi yang menerima argumen individu, dan melakukan pembagian untuk Anda.Jawaban:
Periksa fungsi atan2 .
Ini memberi Anda sudut antara (0, 0) dan (x, y),
x
dany
menjadi argumen fungsi.Edit: jika pusat lingkaran tidak (0, 0), tidak peduli, hanya melakukan ini:
atan2(y - cy, x - cx)
.sumber
(0,0)
? Saya kira saya baru saja mengimbangi argumenatan2
seperti yang ditunjukkan oleh @Luis di bawah ini?y
atan2
mundur!Anda perlu bagian tengah kenop dan titik kursor bersama dengan fungsi atan2 . Anda kemudian menggunakannya seperti ini:
sumber
Referensi yang bagus: http://www.mathsisfun.com/polar-cartesian-coordinates.html
sumber