Exemplo n.º 1
0
        public static List <LineSeg> Cut(LineSeg l1, LineSeg l2, Vector2 i)
        {
            List <LineSeg> line = new List <LineSeg>();

            l1.Cut(i, out LineSeg i1, out LineSeg i2);
            line.Add(i1);
            line.Add(i2);
            l2.Cut(i, out i1, out i2);
            line.Add(i1);
            line.Add(i2);
            return(line);
        }
Exemplo n.º 2
0
        public static bool IsIntersect(LineSeg l1, LineSeg l2, out Vector2 i)
        {
            //if (l1.IsConnectedWith(l2))
            //{
            //    i = new Vector2();
            //    return false;
            //}

            Vector2 s1 = l1.P2 - l1.P1;
            Vector2 s2 = l2.P2 - l2.P1;

            float s = (-s1.Y * (l1.P1.X - l2.P1.X) + s1.X * (l1.P1.Y - l2.P1.Y)) / (-s2.X * s1.Y + s1.X * s2.Y);
            float t = (s2.X * (l1.P1.Y - l2.P1.Y) - s2.Y * (l1.P1.X - l2.P1.X)) / (-s2.X * s1.Y + s1.X * s2.Y);

            if (s >= 0 && s <= 1 && t >= 0 && t <= 1)
            {
                i = new Vector2(l1.P1.X + t * s1.X, l1.P1.Y + t * s1.Y);
                return(i != l2.P1 && i != l2.P2);
            }
            i = new Vector2();
            return(false);
        }
Exemplo n.º 3
0
 public void Cut(Vector2 point, out LineSeg l1, out LineSeg l2)
 {
     l1 = new LineSeg(P1, point, Normal, Material);
     l2 = new LineSeg(P2, point, Normal, Material);
 }