public static Vector2 Rotate(
Vector2 vec, double angle, Vector2 origin,
bool degrees = true, bool absoluteOrigin = true)
{
if (degrees)
angle *= System.Math.PI / 180f;
double cos = System.Math.Cos(angle);
double sin = System.Math.Sin(angle);
if (absoluteOrigin)
{
double x = vec.X - origin.X;
double y = vec.Y - origin.Y;
double nx = x * cos - y * sin + origin.X;
double ny = x * sin + y * cos + origin.Y;
return new Vector2((float)nx, (float)ny);
}
else
{
double x = origin.X;
double y = origin.Y;
double nx = (1 - cos) * x + sin * y + vec.X;
double ny = (1 - cos) * y - sin * x + vec.Y;
return new Vector2((float)nx, (float)ny);
}
}