Nhận góc theo radian cho một điểm trên một vòng tròn


14

Tôi đang làm việc trên một mặt số xoay quanh một vòng tròn.

trước khi nhấp

Mặt số này sẽ cho phép bạn di chuyển bất cứ nơi nào trong vòng tròn để điều chỉnh vị trí của mặt số thành một điểm trên vòng tròn có cùng góc với nhấp chuột. Ví dụ: từ mặt số ở trên nếu bạn nhấp vào vị trí hiển thị màu hồng bên dưới, tôi sẽ di chuyển mặt số phía trên điểm đó nhưng trên vòng tròn.

sau khi nhấp (màu hồng)

Tôi biết làm thế nào để có được vị trí của một điểm trên một vòng tròn cho bán kính và một góc (tính bằng radian). Đó là công thức :

x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;

Tuy nhiên, tôi đang tìm cách làm điều ngược lại - tôi đã có một điểm nhấp chuột, mà tôi muốn biến thành một điểm trên một vòng tròn (nơi núm điều khiển đi). Tôi đang cố gắng sử dụng điểm này (và bán kính cho trước) để tìm ra góc theo radian cho nó, để tôi có thể đặt núm điều khiển trên vòng tròn ở cùng một góc.

Có một công thức tiện dụng tôi có thể sử dụng để thực hiện điều này?


Bạn đang tìm kiếm công thức để có được một góc giữa các điểm?
William Mariager

Bạn có thể có được một góc giữa hai điểm? Tôi có thể tính toán độ dốc nhưng tôi đoán là tôi cần một điểm thứ ba để tạo ra một hình tam giác và sử dụng hàm ba chiều nghịch đảo để giải quyết điều này.
biên tập viên

Tôi đã đăng một câu trả lời cho thấy làm thế nào để làm điều đó.
William Mariager

3
Những gì bạn thực sự có ở đây là góc giữa hai vectơ . Cả hai đều bắt nguồn từ tâm của vòng tròn và có cùng độ lớn (bán kính của vòng tròn).
MichaelHouse

Đây là toán học đằng sau nó: hàm trig nghịch đảo . atanlà viết tắt của arctan, và atan2chỉ là một hàm chấp nhận các đối số riêng lẻ và thực hiện phép chia cho bạn.
voithos

Câu trả lời:


25

Kiểm tra chức năng atan2 .

Nó cung cấp cho bạn góc giữa (0, 0) và (x, y) xylà đối số của hàm.

Chỉnh sửa: nếu tâm của vòng tròn không (0, 0), không vấn đề gì, chỉ cần làm điều này : atan2(y - cy, x - cx).


Có vấn đề gì không nếu trung tâm vòng tròn của tôi không ở (0,0)? Tôi đoán tôi chỉ cần bù các đối số atan2như được hiển thị bởi @Luis bên dưới?
biên tập viên

Chỉ cần dịch bằng cách trừ. Xem chỉnh sửa.
jcora

3
-1: Tham số đầu tiên cho atan2 lày
Luis Estrada

2
Cảm ơn @LuisEstrada, tôi mới sửa nó. (Hy vọng bạn sẽ biến nó thành +1. :))
jcora

+ Luis Estrada Xin lỗi vì đã làm phiền bạn, nhưng tôi phải cảm ơn bạn. Tôi đã cố gắng gỡ lỗi chương trình của tôi trong một ngày rưỡi nay. Hóa ra, những lý lẽ atan2đã lạc hậu!
Carcigenicate

8

Bạn cần trung tâm của núm và điểm của con trỏ cùng với chức năng atan2 . Sau đó, bạn sử dụng nó như thế này:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.