Вычислить угол точки щелчка

Я создаю элемент управления WPF (ручка). Я пытаюсь вычислить математику, чтобы вычислить угол (от 0 до 360) на основе положения щелчка мыши внутри круга.

Например, если я нажимаю, где X, Y находится на изображении, у меня будет точка X, Y. У меня тоже есть центр, и я не могу понять, как получить угол.

circle image

Мой код ниже:

internal double GetAngleFromPoint(Point point, Point centerPoint)
{
    double dy = (point.Y - centerPoint.Y);
    double dx = (point.X - centerPoint.X);

    double theta = Math.Atan2(dy,dx);

    double angle = (theta * 180) / Math.PI;

    return angle;
}

Ответ 1

У вас это почти правильно:

internal double GetAngleFromPoint(Point point, Point centerPoint)
{
    double dy = (point.Y - centerPoint.Y);
    double dx = (point.X - centerPoint.X);

    double theta = Math.Atan2(dy,dx);

    double angle = (90 - ((theta * 180) / Math.PI)) % 360;

    return angle;
}

Ответ 2

Вам нужно

double theta = Math.Atan2(dx,dy);

Ответ 3

Правильный расчет таков:

var theta = Math.Atan2(dx, -dy);
var angle = ((theta * 180 / Math.PI) + 360) % 360;

Вы также можете позволить Vector.AngleBetween выполнить расчет:

var v1 = new Vector(dx, -dy);
var v2 = new Vector(0, 1);
var angle = (Vector.AngleBetween(v1, v2) + 360) % 360;