2013-01-19 11 views
10

Ich mache eine WPF-Steuerung (Knopf). Ich versuche, die Mathematik zu berechnen, um den Winkel (0 bis 360) basierend auf einer Mausklickposition innerhalb des Kreises zu berechnen.Berechnen Sie den Winkel eines Klickpunkts

Zum Beispiel, wenn ich klicke, wo das X, Y auf dem Bild ist, hätte ich einen Punkt X, Y. Ich habe auch den Mittelpunkt und kann nicht herausfinden, wie man den Winkel bekommt.

circle image

Mein Code unten:

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

Antwort

8

Sie haben es fast richtig:

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

Die Art, wie ich es habe funktioniert: Doppelwinkel = (360 - ((Theta * 180)/Math.PI))% 360; –

+0

Danke! Ich schätze es. Ich habe stundenlang dafür gegoogelt! –

3

Sie benötigen

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

Richtig! Danke noch einmal. –

2

Die korrekte Berechnung ist folgendes:

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

könnten Sie auch lassen Vector.AngleBetween die Berechnung tun:

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

Nie den Vector.AngleBetween gesehen. Danke für den Tipp! –

Verwandte Themen