Artemis.Engine.Maths.Geometry.VectorUtils.Rotate C# (CSharp) Method

Rotate() public static method

Rotate a vector by the given amount relative to the given point, and return the result.
public static Rotate ( Vector2 vec, double angle, Vector2 origin, bool degrees = true, bool absoluteOrigin = true ) : Vector2
vec Vector2
angle double
origin Vector2
degrees bool
absoluteOrigin bool
return Vector2
        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);
            }
        }