Отримайте кут у радіанах із заданою точкою на колі


14

Я працюю над циферблатом, який обертається навколо кола.

перед клацанням

Цей циферблат повинен дозволяти вам переміщувати мишу в будь-якій точці кола, щоб регулювати положення циферблата до точки на колі з таким же кутом, як і клацання. Наприклад, з набору номера зверху, якщо ви натиснули місце, показане рожевим внизу, я переміщу циферблат над цією точкою, але на колі.

після натискання (рожевий)

Я знаю, як отримати положення точки на колі, заданому радіусом і кутом (у радіанах). Ось така формула :

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

Однак я хочу зробити щось протилежне - у мене є точка клацання, яку я хочу перетворити на точку на колі (куди йде регулятор управління). Я намагаюся використовувати цю точку (і заданий радіус), щоб визначити для неї кут у радіанах, щоб я міг розмістити регулятор на колі під одним кутом.

Чи є зручна формула, яку я можу використовувати для цього?


Шукаєте формулу, щоб отримати кут між точками?
Вільям Маріагер

Чи можете ви отримати кут між двома точками? Я можу обчислити нахил, але я здогадувався, що мені потрібна третя точка, щоб створити трикутник і використовувати зворотну тригономічну функцію для вирішення цього питання.
редактор

Я опублікував відповідь, в якій показав, як це зробити.
Вільям Маріагер

3
Тут ви дійсно маєте кут між двома векторами . Обидва вони походять від центру кола і мають однакову величину (радіус кола).
MichaelHouse

Ось математика за нею: функції зворотного тригера . atanскорочено arctan, і atan2є лише функцією, яка приймає окремі аргументи і робить поділ для вас.
voithos

Відповіді:


25

Перевірте функцію atan2 .

Це дає вам кут між (0, 0) і (x, y) xтаy будучи аргументами функції.

Edit: якщо центр кола не є (0, 0), незалежно від того, просто зробити це: atan2(y - cy, x - cx).


Чи має значення, якщо центр мого кола не знаходиться (0,0)? Я здогадуюсь, що я просто компенсував аргументи, atan2як показано нижче @Luis?
редактор

Просто перекладіть відніманням. Дивіться редагування.
jcora

3
-1: Перший параметр для atan2y
Луїс Естрада

2
Дякую @LuisEstrada, я просто виправив це. (Сподіваємось, вам це стане +1. :))
jcora

+ Луїс Естрада Вибачте за це, але я повинен був вам подякувати. Я намагаюся налагодити свою програму вже півтора дня. Виходить, аргументи atan2були зворотніми!
Carcigenicate

8

Вам потрібен центр ручки та точка курсору разом із функцією atan2 . Потім ви використовуєте його так:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.