Artemis.Engine.Maths.Geometry.EllipseUtils.EllipseOverlapSegment C# (CSharp) Метод

EllipseOverlapSegment() публичный статический Метод

Test if an ellipse overlaps a given line segment.
public static EllipseOverlapSegment ( Vector2 K, double A, double B, Vector2 P0, Vector2 P1 ) : bool
K Vector2
A double
B double
P0 Vector2
P1 Vector2
Результат bool
        public static bool EllipseOverlapSegment(
            Vector2 K, double A, double B,
            Vector2 P0, Vector2 P1)
        {
            // For the math, see:
            //   http://www.geometrictools.com/Documentation/IntersectionRectangleEllipse.pdf
            double q0, q1, q2;

            var Q0 = new Vector2((float)((P0.X - K.X) / A), (float)((P0.Y - K.Y) / B));
            var Q1 = new Vector2((float)((P1.X - P0.X) / A), (float)((P1.X - P0.X) / B));

            q0 = Vector2.Dot(Q0, Q0) - 1;
            q1 = Vector2.Dot(Q0, Q1);
            q2 = Vector2.Dot(Q1, Q1);

            if (q2 == 0)
            {
                double d = -q0 / q1;
                return 0 <= d && d <= 1;
            }

            double discr = q1 * q1 - q0 * q2;
            if (discr < 0)
                return false;

            double sqrt_discr = System.Math.Sqrt(discr);
            return (sqrt_discr - q1) >= 0 && (sqrt_discr + q1) >= -q2;
        }