Я работаю над циферблатом, который вращается по кругу.
Этот циферблат позволяет перемещать мышь в любом месте круга, чтобы отрегулировать положение циферблата в точке на круге с тем же углом, что и щелчок. Например, на циферблате выше, если вы щелкнете по точке, показанной розовым цветом ниже, я бы переместил циферблат выше этой точки, но по кругу.
Я знаю, как получить положение точки на окружности с учетом радиуса и угла (в радианах). Вот эта формула :
x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;
Тем не менее, я пытаюсь сделать что-то противоположное - у меня есть точка щелчка, которую я хочу превратить в точку на круге (куда идет ручка управления). Я пытаюсь использовать эту точку (и данный радиус), чтобы вычислить для нее угол в радианах, чтобы я мог поместить ручку управления на круг под тем же углом.
Есть ли удобная формула, которую я могу использовать для достижения этой цели?
источник
atan
это сокращение отarctan
, иatan2
это просто функция, которая принимает отдельные аргументы, и делает разделение для вас.Ответы:
Проверьте функцию atan2 .
Он дает вам угол между (0, 0) и (x, y)
x
иy
является аргументом функции.Edit: если центр окружности не является (0, 0), независимо от того, просто сделать это:
atan2(y - cy, x - cx)
.источник
(0,0)
? Я предполагаю, что простоatan2
сместил аргументы, как показано @Luis ниже?y
atan2
были задом наперед!Вам нужен центр ручки и точка курсора вместе с функцией atan2 . Затем вы используете это так:
источник
Хорошая ссылка: http://www.mathsisfun.com/polar-cartesian-coordinates.html
источник