10

我正在制作一个 WPF 控件(旋钮)。我正在尝试根据圆内的鼠标单击位置计算出计算角度(0 到 360)的数学方法。

例如,如果我单击图像上 X,Y 的位置,我将有一个点 X,Y。我也有中心点,不知道如何获得角度。

圆形图像

我的代码如下:

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;
}
4

3 回答 3

9

你几乎是对的:

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;
}
于 2013-01-19T10:58:02.617 回答
3

你需要

double theta = Math.Atan2(dx,dy);
于 2013-01-19T10:54:13.110 回答
2

正确的计算是这样的:

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;
于 2013-01-19T11:04:39.520 回答