Получить положительный или отрицательный угол из 3 точек

Я вращаю точки вокруг центральной точки в 2D-пространстве. Точки - это центральная точка, старая позиция мыши и новая позиция мыши. Моя функция вращения работает нормально, и я могу точно рассчитать угол. Но я хочу рассчитать отрицательный угол, если пользователь перемещает мышь в направлении, которое следует интерпретировать как против часовой стрелки.

Например, перемещение мыши вправо (положительная ось x) должно вращаться по часовой стрелке, если вы находитесь выше (меньше) значения y центральной точки, но оно должно вращаться против часовой стрелки, если вы на самом деле ниже ( больше чем) значение y центральной точки.

Вот что у меня есть:

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

Мне нужен способ сделать угол отрицательным, когда это необходимо, чтобы точки вращались по часовой стрелке или против часовой стрелки, чтобы следовать за положением мыши.

5
задан Trevor Elliott 26 January 2012 в 17:34
поделиться