2013-01-19 10 views
10

Wykonuję kontrolę WPF (pokrętło). Próbuję obliczyć matematykę, aby obliczyć kąt (od 0 do 360) na podstawie pozycji kliknięcia myszą wewnątrz okręgu.Oblicz kąt kliknięcia

Na przykład, jeśli kliknę, gdzie X, Y jest na obrazie, będę miał punkt X, Y. Mam również punkt środkowy i nie mogę wymyślić, jak uzyskać kąt.

circle image

Mój kod poniżej:

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

Odpowiedz

8

Masz prawie rację:

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

Sposób, w jaki mam to działa to: podwójny kąt = (360 - ((theta * 180)/Math.PI))% 360; –

+0

Dzięki! Doceniam to. Godzinami szukam tego! –

3

Trzeba

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

Prawidłowe! Dzięki jeszcze raz. –

2

Prawidłowa kalkulacja jest następująca:

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

Można również pozwolić Vector.AngleBetween wykonać obliczenia:

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

Nigdy nie widziałem Vector.AngleBetween. Dzięki za wskazówkę! –