/// <summary>
        /// Get collision data between two collliders. NOTE, this will not cause a physical collision, if you want to cause a collision use the function "collide()" in the object returned.
        /// </summary>
        /// <param name="a">Any circle collider.</param>
        /// <param name="b">Any line collider.</param>
        /// <returns>The collision data between the colliders, or null if no collision occured.</returns>
        public static Collision getCollision(CircleCollider a, LineCollider b)
        {
            //precalculate gradient for efficiancy.
            double gradient = b.globalGradient;
            //squere distance between circle center to possible contact point
            double sqrDistance = a.globalCenter.Y - b.globalCenter.Y + gradient * (b.globalCenter.X - a.globalCenter.X);

            sqrDistance *= sqrDistance / (gradient * gradient + 1);
            if (sqrDistance > a.radius * a.radius)
            {
                return(null);
            }
            if (a.globalCenter.sqrDistance(b.globalCenter) - sqrDistance > b.length * b.length / 4)
            {
                return(null);
            }
            Vector2d normal = b.globalNormalVector;

            //look here for 1 directional colliders.
            if ((a.globalCenter - b.globalCenter).cosineOfAngleBetween(normal) > 0)
            {
                normal *= -1;
            }
            return(new Collision(a,
                                 b,
                                 normal,
                                 a.globalCenter + Sqrt(sqrDistance) * normal,
                                 a.radius - Sqrt(sqrDistance)));
        }
 /// <summary>
 /// Get collision data between two collliders. NOTE, this will not cause a physical collision, if you want to cause a collision use the function "collide()" in the object returned.
 /// </summary>
 /// <param name="a">Any circle collider.</param>
 /// <param name="b">Any Circle collider.</param>
 /// <returns>The collision data between the colliders, or null if no collision occured.</returns>
 public static Collision getCollision(CircleCollider a, CircleCollider b)
 {
     if ((a.globalCenter - b.globalCenter).LengthSquared <= (a.radius + b.radius) * (a.radius + b.radius))
     {
         return(new Collision(a,
                              b,
                              -(a.globalCenter - b.globalCenter).Normalized(),                                 //normal
                              (a.globalCenter * a.radius + b.globalCenter * b.radius) / (a.radius + b.radius), //point(weighted average)
                              a.radius + b.radius - a.globalCenter.distance(b.globalCenter)));
     }
     return(null);
 }
 /// <summary>
 /// Get collision data between two collliders. NOTE, this will not cause a physical collision, if you want to cause a collision use the function "collide()" in the object returned.
 /// </summary>
 /// <param name="a">Any line collider.</param>
 /// <param name="b">Any Circle collider.</param>
 /// <returns>The collision data between the colliders, or null if no collision occured.</returns>
 public static Collision getCollision(LineCollider a, CircleCollider b)
 {
     return(getCollision(b, a));
 }