Trevor Elliott - 9 months ago 37

C# Question

I am rotating points around a center point in 2D space. The points are the center point, the old mouse position, and the new mouse position. My rotation function works fine, and I can calculate the angle perfectly. But I want to calculate a negative angle if the user is moving their mouse in a direction which should be interpreted as counter-clockwise.

For example, moving the mouse toward the right (positive x-axis) should rotate clockwise if you are above (less than) the y value of the center point, but it should rotate counter-clockwise if you are actually below (greater than) the y value of the center point.

Here's what I have:

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

So I need a way to make angle negative when it needs to be, so the points rotate clockwise or counter-clockwise to follow the mouse position.

Answer

try this, but i'm not shure:

```
double v1x = Xb - Xc;
double v1y = Yb - Yc;
double v2x = Xa - Xc;
double v2y = Ya - Yc;
double angle = Math.atan2(v1x, v1y) - Math.atan2(v2x, v2y);
```

Source (Stackoverflow)