Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算单击点的角度_C#_Wpf_Math - Fatal编程技术网

C# 计算单击点的角度

C# 计算单击点的角度,c#,wpf,math,C#,Wpf,Math,我正在做一个WPF控制(旋钮)。我正试图通过鼠标在圆内的点击位置来计算角度(0到360) 例如,如果我单击图像上X,Y的位置,我会有一个点X,Y。我也有一个中心点,但我不知道如何获得角度 我的代码如下: internal double GetAngleFromPoint(Point point, Point centerPoint) { double dy = (point.Y - centerPoint.Y); double dx = (point.X - centerPoi

我正在做一个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;
}
你需要

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

你几乎说对了:

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

正确的计算方法是:

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

您也可以让我们进行计算:

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

我让它工作的方式是:双角度=(360-((θ*180)/Math.PI))%360;谢谢我很感激。为此,我在谷歌上搜索了几个小时!从未见过矢量。角度介于两者之间。谢谢你的提示!