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 に答える