/// <summary>
        ///     Calculates the intersection between two line segments.
        /// </summary>
        /// <param name="a">The first line segment.</param>
        /// <param name="b">The segment line segment.</param>
        /// <param name="intersectionFound">Whether or not the lines intersect.</param>
        /// <returns>The point of intersection between the two given line segments.</returns>
        public static DoublePoint CalculateLineIntersection(DoubleLine a, DoubleLine b, out bool intersectionFound)
        {
            // Calculate the determinant's denominator
            var denominator = (a._start.X - a._end.X) * (b._start.Y - b._end.Y) -
                              (a._start.Y - a._end.Y) * (b._start.X - b._end.X);

            if (denominator != 0)
            {
                // Calculate the determinants
                var xDeterminant = ((a._start.X * a._end.Y - a._start.Y * a._end.X) * (b._start.X - b._end.X) -
                                    (a._start.X - a._end.X) * (b._start.X * b._end.Y - b._start.Y * b._end.X)) /
                                   denominator;
                var yDeterminant = ((a._start.X * a._end.Y - a._start.Y * a._end.X) * (b._start.Y - b._end.Y) -
                                    (a._start.Y - a._end.Y) * (b._start.X * b._end.Y - b._start.Y * b._end.X)) /
                                   denominator;

                // Ensure that the intersection point actually lies within both line segments
                if (MathUtils.AlmostGreaterThanOrEqual(xDeterminant, Math.Min(a._start.X, a._end.X)) &&
                    MathUtils.AlmostLessThanOrEqual(xDeterminant, Math.Max(a._start.X, a._end.X)) &&
                    MathUtils.AlmostGreaterThanOrEqual(xDeterminant, Math.Min(b._start.X, b._end.X)) &&
                    MathUtils.AlmostLessThanOrEqual(xDeterminant, Math.Max(b._start.X, b._end.X)) &&
                    MathUtils.AlmostGreaterThanOrEqual(yDeterminant, Math.Min(a._start.Y, a._end.Y)) &&
                    MathUtils.AlmostLessThanOrEqual(yDeterminant, Math.Max(a._start.Y, a._end.Y)) &&
                    MathUtils.AlmostGreaterThanOrEqual(yDeterminant, Math.Min(b._start.Y, b._end.Y)) &&
                    MathUtils.AlmostLessThanOrEqual(yDeterminant, Math.Max(b._start.Y, b._end.Y))
                    )
                {
                    intersectionFound = true;
                    return(new DoublePoint(xDeterminant, yDeterminant));
                }
            }

            // If the denominator came out to 0 or the point isn't within both
            // line segments, then the lines don't intersect
            intersectionFound = false;
            return(new DoublePoint(0, 0));
        }