Estoy girando puntos alrededor de un punto central en el espacio 2D. Los puntos son el punto central, la posición del mouse anterior 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 su mouse en una dirección que debe interpretarse como en sentido antihorario.Recuperar un ángulo positivo o negativo de 3 puntos
Por ejemplo, moviendo el mouse hacia la derecha (eje x positivo) debería girar hacia la derecha si está por encima (menor que) el valor y del centro, pero debería girar en sentido antihorario si está realmente 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 manera de hacer ángulo negativo cuando tiene que ser, por lo que los puntos de girar hacia la derecha o hacia la izquierda para seguir la posición del ratón.
Esto parece funcionar. Va en sentido contrario a las agujas del reloj cuando se supone que debe hacerlo. –