예제 #1
0
        public static Vector2[] GetIntersects(ISegment seg1, ISegment seg2)
        {
            try
            {
                ThrowIfInvalidShape(seg1);
                ThrowIfInvalidShape(seg2);
            }
            catch { throw; }

            if (Grad(seg1) == Grad(seg2))
            {
                if (Yint(seg1) == Yint(seg2))
                {
                    throw new SameShapeException();
                }
                else
                {
                    return new Vector2[] { }
                };
            }

            float   intersect_x = (Yint(seg2) - Yint(seg1)) / (Grad(seg1) - Grad(seg2));
            Vector2 intersect   = new Vector2(intersect_x, intersect_x * Grad(seg1) + Yint(seg1));
            var     seg1_len    = seg1.Point1.Distance(seg1.Point2);
            var     seg2_len    = seg2.Point1.Distance(seg2.Point2);

            if (intersect.Distance(seg1.Point1) < seg1_len &&
                intersect.Distance(seg1.Point2) < seg1_len &&
                intersect.Distance(seg2.Point1) < seg2_len &&
                intersect.Distance(seg2.Point2) < seg2_len)
            {
                return(new Vector2[] { intersect });
            }
            else
            {
                return new Vector2[] { }
            };
        }
예제 #2
0
        public static Vector2[] GetIntersects(ILine line, ISegment seg)
        {
            try
            {
                ThrowIfInvalidShape(line);
                ThrowIfInvalidShape(seg);
            }
            catch { throw; }

            if (Grad(line) == Grad(seg))
            {
                if (Yint(line) == Yint(seg))
                {
                    throw new SameShapeException();
                }
                else
                {
                    return new Vector2[] { }
                };
            }

            float   intersect_x = (Yint(seg) - Yint(line)) / (Grad(line) - Grad(seg));
            Vector2 intersect   = new Vector2(intersect_x, intersect_x * Grad(line) + Yint(line));
            var     line_len    = line.Point1.Distance(line.Point2);
            var     seg_len     = seg.Point1.Distance(seg.Point2);

            if (intersect.Distance(seg.Point1) < seg_len &&
                intersect.Distance(seg.Point2) < seg_len)
            {
                return(new Vector2[] { intersect });
            }
            else
            {
                return new Vector2[] { }
            };
        }
예제 #3
0
 public static FLOAT Distance(VECTOR a, VECTOR b)
 {
     return(VECTOR.Distance(a, b));
 }
예제 #4
0
 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static FLOAT Distance(VECTOR a, VECTOR b)
 {
     return(VECTOR.Distance(a, b));
 }