Recupere un ángulo positivo o negativo de 3 puntos
Estoy rotando puntos alrededor de un punto central en el espacio 2D. Los puntos son el punto central, la posición anterior del mouse y la nueva posición del mouse. Mi función de rotación funciona bien y puedo calcular el ángulo perfectamente. Pero quiero calcular un ángulo negativo si el usuario mueve el mouse en una dirección que debe interpretarse en sentido antihorario.
Por ejemplo, mover el mouse hacia la derecha (eje x positivo) debe girar en sentido horario si está por encima (menos que) del valor y del punto central, pero debe girar en sentido antihorario si está realmente por debajo (mayor que ) el valor y del punto central.
Esto es lo que tengo:
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);
Así que necesito una forma de hacer que el ángulo sea negativo cuando sea necesario, para que los puntos giren en sentido horario o antihorario para seguir la posición del mouse.