计算点击点的角度

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

我现在的实现方式是:double angle = (360 - ((theta * 180) / Math.PI)) % 360; - Rick Rat
谢谢!我很感激。我已经在谷歌上搜索了几个小时才找到这个! - Rick Rat

3
您需要:
double theta = Math.Atan2(dx,dy);

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;

从未见过Vector.AngleBetween。谢谢提示! - Rick Rat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接