Esempio n. 1
0
        public static bool Overlap(LineF line, RectangleF rect)
        {
            line.Setup();

            float tmin, tmax, tymin, tymax;

            if (line._dx >= 0)
            {
                tmin = (rect.X - line.Start.X) * line._idx;
                tmax = (rect.X + rect.Width - line.Start.X) * line._idx;
            }
            else
            {
                tmin = (rect.X + rect.Width - line.Start.X) * line._idx;
                tmax = (rect.X - line.Start.X) * line._idx;
            }
            if (line._dy >= 0)
            {
                tymin = (rect.Y - line.Start.Y) * line._idy;
                tymax = (rect.Y + rect.Height - line.Start.Y) * line._idy;
            }
            else
            {
                tymin = (rect.Y + rect.Height - line.Start.Y) * line._idy;
                tymax = (rect.Y - line.Start.Y) * line._idy;
            }
            return !((tmin > tymax) || (tymin > tmax));
        }
Esempio n. 2
0
        public static bool Overlap(LineF line, RectangleF rect)
        {
            line.Setup();

            float tmin, tmax, tymin, tymax;

            if (line._dx >= 0)
            {
                tmin = (rect.X - line.Start.X) * line._idx;
                tmax = (rect.X + rect.Width - line.Start.X) * line._idx;
            }
            else
            {
                tmin = (rect.X + rect.Width - line.Start.X) * line._idx;
                tmax = (rect.X - line.Start.X) * line._idx;
            }
            if (line._dy >= 0)
            {
                tymin = (rect.Y - line.Start.Y) * line._idy;
                tymax = (rect.Y + rect.Height - line.Start.Y) * line._idy;
            }
            else
            {
                tymin = (rect.Y + rect.Height - line.Start.Y) * line._idy;
                tymax = (rect.Y - line.Start.Y) * line._idy;
            }
            return(!((tmin > tymax) || (tymin > tmax)));
        }
Esempio n. 3
0
        public static bool Overlap(LineF a, LineF b)
        {
            a.Setup();
            b.Setup();

            float s1 = b._dx * (a.Start.Y - b.Start.Y) - b._dy * (a.Start.X - b.Start.X);
            float s2 = a._dx * (a.Start.Y - b.Start.Y) - a._dy * (a.Start.X - b.Start.X);
            float d = 1 / (b._dy * a._dx - a._dy * b._dx);

            float u1 = s1 * d;
            float u2 = s2 * d;

            return 0 <= u1 && u1 <= 1
                && 0 <= u2 && u2 <= 1;
        }
Esempio n. 4
0
        public static bool Overlap(LineF a, LineF b)
        {
            a.Setup();
            b.Setup();

            float s1 = b._dx * (a.Start.Y - b.Start.Y) - b._dy * (a.Start.X - b.Start.X);
            float s2 = a._dx * (a.Start.Y - b.Start.Y) - a._dy * (a.Start.X - b.Start.X);
            float d  = 1 / (b._dy * a._dx - a._dy * b._dx);

            float u1 = s1 * d;
            float u2 = s2 * d;

            return(0 <= u1 && u1 <= 1 &&
                   0 <= u2 && u2 <= 1);
        }