Obracam punkty wokół punktu środkowego w przestrzeni 2D. Punkty są punktem środkowym, starą pozycją myszy i nową pozycją myszy. Moja funkcja obrotu działa dobrze i mogę idealnie obliczyć kąt. Ale chcę obliczyć kąt ujemny, jeśli użytkownik porusza myszą w kierunku, który powinien być interpretowany jako przeciwny do ruchu wskazówek zegara.Odzyskaj kąt dodatni lub ujemny z 3 punktów
Na przykład, przesuwanie myszy w prawo (dodatnia oś x) powinno obracać się zgodnie z ruchem wskazówek zegara, jeśli jesteś powyżej (mniej niż) wartości y punktu środkowego, ale powinno ono obracać się przeciwnie do ruchu wskazówek zegara, jeśli faktycznie znajdujesz się poniżej (większa niż) wartość y punktu środkowego.
Oto co mam:
PointF centerPoint;
PointF oldPoint;
PointF newPoint;
double Xc = centerPoint.X;
double Yc = centerPoint.Y;
double Xb = oldPoint.X;
double Yb = oldPoint.Y;
double Xa = newPoint.X;
double Ya = newPoint.Y;
double c2 = (Math.Pow(Xb - Xa, 2) + Math.Pow(Yb - Ya, 2));
double a2 = (Math.Pow(Xb - Xc, 2) + Math.Pow(Yb - Yc, 2));
double b2 = (Math.Pow(Xa - Xc, 2) + Math.Pow(Ya - Yc, 2));
double a = Math.Sqrt(a2);
double b = Math.Sqrt(b2);
double val = (a2 + b2 - c2)/(2 * a * b);
double angle = Math.Acos(val);
Więc potrzebny jest sposób, aby kąt ujemny, kiedy to musi być, więc punkty obracać w prawo lub w lewo, aby śledzić pozycję myszy.
To wydaje się działać. Wychodzi przeciwnie do ruchu wskazówek zegara, kiedy ma. –