Recupere um ângulo positivo ou negativo de 3 pontos

Estou girando pontos em torno de um ponto central no espaço 2D. Os pontos são o ponto central, a posição antiga do mouse e a nova posição do mouse. Minha função de rotação funciona bem e posso calcular o ângulo perfeitamente. Mas quero calcular um ângulo negativo se o usuário estiver movendo o mouse em uma direção que deve ser interpretada no sentido anti-horári

Por exemplo, mover o mouse para a direita (eixo x positivo) deve girar no sentido horário se você estiver acima (menor que) do valor y do ponto central, mas deve girar no sentido anti-horário se você estiver realmente abaixo (maior que ) o valor y do ponto centra

Aqui está o que eu tenho:

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

Por isso, preciso de uma maneira de tornar o ângulo negativo quando necessário, para que os pontos giram no sentido horário ou anti-horário para seguir a posição do mous

questionAnswers(8)

yourAnswerToTheQuestion