Dapatkan sudut dalam radian yang diberi titik pada lingkaran


14

Saya sedang mengerjakan dial yang berputar di sekitar lingkaran.

sebelum klik

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.

setelah klik (merah muda)

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?


Apakah Anda mencari rumus untuk mendapatkan sudut antara titik ke titik?
William Mariager

Bisakah Anda mendapatkan sudut antara dua titik? Saya dapat menghitung kemiringan tetapi tebakan saya adalah bahwa saya membutuhkan titik ketiga untuk membuat segitiga dan menggunakan fungsi trigonomis terbalik untuk menyelesaikannya.
editor

Saya mengirim jawaban yang menunjukkan bagaimana melakukannya.
William Mariager

3
Apa yang sebenarnya Anda miliki di sini adalah sudut antara dua vektor . Keduanya berasal dari pusat lingkaran dan memiliki besaran yang sama (jari-jari lingkaran).
MichaelHouse

Inilah matematika di baliknya: fungsi trigonometri terbalik . atanadalah kependekan dari arctan, dan atan2hanya fungsi yang menerima argumen individu, dan melakukan pembagian untuk Anda.
voithos

Jawaban:


25

Periksa fungsi atan2 .

Ini memberi Anda sudut antara (0, 0) dan (x, y), xdan ymenjadi argumen fungsi.

Edit: jika pusat lingkaran tidak (0, 0), tidak peduli, hanya melakukan ini: atan2(y - cy, x - cx).


Apakah penting jika pusat lingkaran saya tidak ada (0,0)? Saya kira saya baru saja mengimbangi argumen atan2seperti yang ditunjukkan oleh @Luis di bawah ini?
editor

Cukup terjemahkan dengan mengurangi. Lihat hasil edit.
jcora

3
-1: Parameter pertama untuk atan2 adalahy
Luis Estrada

2
Terima kasih @LuisEstrada, saya baru saja memperbaikinya. (Mudah-mudahan Anda akan menjadikannya +1. :))
jcora

+ Luis Estrada Maaf untuk nnecro-bump ini, tapi aku harus berterima kasih. Saya telah mencoba untuk men-debug program saya selama satu setengah hari sekarang. Ternyata, argumen untuk atan2mundur!
Carcigenicate

8

Anda perlu bagian tengah kenop dan titik kursor bersama dengan fungsi atan2 . Anda kemudian menggunakannya seperti ini:

 angle = atan2(mouseY - knobCenterY, mouseX - knobCenterX)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.