Esempio n. 1
0
        private static void TestShapes()
        {
            // shapes
            var p  = new Vector(3, 3);
            var d1 = new Vector(7, -2);
            var d2 = new Vector(3, 5);
            var l1 = new Line(p, d1);
            var l2 = new Line(p, d2);

            System.Console.WriteLine($"Line1: {l1}  Line2: {l2}");

            var p1 = new Vector(3, 4);
            var p2 = new Vector(11, 1);
            var p3 = new Vector(8, 4);
            var p4 = new Vector(11, 7);
            var s1 = new LineSegment(p1, p2);
            var s2 = new LineSegment(p3, p4);

            System.Console.WriteLine($"Seg1: {s1}  Seg2: {s2}");

            var   c  = new Vector(6, 4);
            float r  = 4;
            var   c1 = new Circle(c, r);

            System.Console.WriteLine($"Circle: {c1}");

            var rec = new Rectangle(new Vector(2, 3), new Vector(6, 4));

            System.Console.WriteLine(rec);

            var orrec = new OrientedRectangle(new Vector(6, 4), new Vector(3, 2), 30);
        }
Esempio n. 2
0
        private static void TestCollisions()
        {
            var ra = new Rectangle(new Vector(1, 1), new Vector(4, 4));
            var rb = new Rectangle(new Vector(2, 2), new Vector(5, 5));
            var rc = new Rectangle(new Vector(6, 4), new Vector(4, 2));

            Assert(ra.CollidesWith(rb));
            Assert(rb.CollidesWith(rc));
            Assert(!ra.CollidesWith(rc));
            System.Console.WriteLine("Rectangles colliding with rectangles");

            var ca = new Circle(new Vector(4, 4), 2);
            var cb = new Circle(new Vector(7, 4), 2);
            var cc = new Circle(new Vector(10, 4), 2);

            Assert(ca.CollidesWith(cb));
            Assert(cb.CollidesWith(cc));
            Assert(!ca.CollidesWith(cc));
            System.Console.WriteLine("Circles colliding with circles");

            var va = new Vector(2, 3);
            var vb = new Vector(2, 3);
            var vc = new Vector(3, 4);

            Assert(va.CollidesWith(vb));
            Assert(!va.CollidesWith(vc));
            Assert(!vb.CollidesWith(vc));
            System.Console.WriteLine("Vectors/Points colliding with Vectors/Points");

            va = new Vector(3, 5);
            vb = new Vector(3, 2);
            vc = new Vector(8, 4);
            var down = new Vector(5, -1);
            var up   = new Vector(5, 2);
            var la   = new Line(va, down);
            var lb   = new Line(va, up);
            var lc   = new Line(vb, up);
            var ld   = new Line(vc, down);

            Assert(la.CollidesWith(lb));
            Assert(la.CollidesWith(lc));
            Assert(!lb.CollidesWith(lc));
            Assert(la.CollidesWith(ld));
            System.Console.WriteLine("Lines colliding with lines");

            va = new Vector(3, 4);
            vb = new Vector(11, 1);
            vc = new Vector(8, 4);
            var vd = new Vector(11, 7);
            var sa = new LineSegment(va, vb);
            var sb = new LineSegment(vc, vd);

            Assert(!(sa.CollidesWith(sb)));
            vc = new Vector(5, 1);
            sb = new LineSegment(vc, vd);
            Assert((sa.CollidesWith(sb)));
            System.Console.WriteLine("Line Segments colliding with line segments");

            var oa = new OrientedRectangle(new Vector(3, 5), new Vector(1, 3), 15);
            var ob = new OrientedRectangle(new Vector(10, 5), new Vector(2, 2), -15);

            Assert(!oa.CollidesWith(ob));
            oa = new OrientedRectangle(new Vector(7, 5), new Vector(1, 3), 15);
            Assert(oa.CollidesWith(ob));
            System.Console.WriteLine("Oriented rectangles colliding with oriented rectangles");

            ca = new Circle(new Vector(6, 4), 3);
            var pa = new Vector(8, 3);
            var pb = new Vector(11, 7);

            Assert(ca.CollidesWith(pa));
            Assert(!ca.CollidesWith(pb));
            System.Console.WriteLine("Circles colliding with points");

            ca = new Circle(new Vector(6, 3), 2);
            la = new Line(new Vector(4, 7), new Vector(5, -1));
            Assert(!ca.CollidesWith(la));
            la = new Line(new Vector(4, 7), new Vector(1, -1));
            Assert(ca.CollidesWith(la));
            la = new Line(new Vector(4, 5), new Vector(5, -1));
            Assert(ca.CollidesWith(la));
            System.Console.WriteLine("Circles colliding with lines");

            ca = new Circle(new Vector(4, 4), 3);
            sa = new LineSegment(new Vector(8, 6), new Vector(13, 6));
            Assert(!(ca.CollidesWith(sa)));
            sa = new LineSegment(new Vector(6, 6), new Vector(13, 6));
            Assert(ca.CollidesWith(sa));
            System.Console.WriteLine("Circles colliding with line segments");

            ra = new Rectangle(new Vector(3, 2), new Vector(6, 4));
            ca = new Circle(new Vector(5, 4), 1);
            cb = new Circle(new Vector(7, 8), 1);
            Assert(ca.CollidesWith(ra));
            Assert(!cb.CollidesWith(ra));
            System.Console.WriteLine("Circles colliding with rectangles");

            oa = new OrientedRectangle(new Vector(5, 4), new Vector(3, 2), 30);
            ca = new Circle(new Vector(5, 7), 2);
            Assert(ca.CollidesWith(oa));
            ca = new Circle(new Vector(0, 7), 2);
            Assert(!ca.CollidesWith(oa));
            System.Console.WriteLine("Circles colliding with oriented rectangles");

            ra = new Rectangle(new Vector(3, 2), new Vector(6, 4));
            pa = new Vector(4, 5);
            pb = new Vector(11, 4);
            Assert(ra.CollidesWith(pa));
            Assert(!ra.CollidesWith(pb));
            System.Console.WriteLine("Rectangles colliding with points");

            la = new Line(new Vector(6, 8), new Vector(2, -3));
            ra = new Rectangle(new Vector(3, 2), new Vector(6, 4));
            Assert(ra.CollidesWith(la));
            la = new Line(new Vector(6, 8), new Vector(2, -1));
            Assert(!ra.CollidesWith(la));
            System.Console.WriteLine("Rectangles colliding with lines");

            ra = new Rectangle(new Vector(3, 2), new Vector(6, 4));
            sa = new LineSegment(new Vector(6, 8), new Vector(10, 2));
            Assert(ra.CollidesWith(sa));
            sa = new LineSegment(new Vector(6, 8), new Vector(7, 7));
            Assert(!ra.CollidesWith(sa));
            System.Console.WriteLine("Rectangles colliding with line segments");

            ra = new Rectangle(new Vector(1, 5), new Vector(3, 3));
            oa = new OrientedRectangle(new Vector(10, 4), new Vector(4, 2), 25);
            Assert(!ra.CollidesWith(oa));
            ra = new Rectangle(new Vector(1, 5), new Vector(7, 3));
            Assert(ra.CollidesWith(oa));
            System.Console.WriteLine("Rectangles colliding with oriented rectangles");

            pa = new Vector(5, 3);
            la = new Line(new Vector(3, 7), new Vector(7, -2));
            Assert(!la.CollidesWith(pa));
            pa = new Vector(10, 5);
            Assert(la.CollidesWith(pa));
            System.Console.WriteLine("Lines colliding with points");

            pa = new Vector(1, 4);
            sa = new LineSegment(new Vector(6, 6), new Vector(13, 4));
            Assert(!sa.CollidesWith(pa));
            pa = new Vector(9.5f, 5);
            Assert(sa.CollidesWith(pa));
            System.Console.WriteLine("Line segments colliding with points");

            oa = new OrientedRectangle(new Vector(5, 4), new Vector(3, 2), 30);
            va = new Vector(6, 5);
            vb = new Vector(10, 6);
            Assert(oa.CollidesWith(va));
            Assert(!oa.CollidesWith(vb));
            System.Console.WriteLine("Oriented rectangles collding with points");

            sa = new LineSegment(new Vector(8, 4), new Vector(11, 7));
            la = new Line(new Vector(3, 4), new Vector(4, -2));
            Assert(!la.CollidesWith(sa));
            sa = new LineSegment(new Vector(5, 1), new Vector(11, 7));
            Assert(la.CollidesWith(sa));
            System.Console.WriteLine("Lines colliding with line segments");

            la = new Line(new Vector(7, 3), new Vector(2, -1));
            oa = new OrientedRectangle(new Vector(5, 4), new Vector(3, 2), 30);
            Assert(oa.CollidesWith(la));
            la = new Line(new Vector(7, 10), new Vector(2, -1));
            Assert(!oa.CollidesWith(la));
            System.Console.WriteLine("Oriented rectangles colliding with lines");

            sa = new LineSegment(new Vector(1, 8), new Vector(7, 5));
            oa = new OrientedRectangle(new Vector(5, 4), new Vector(3, 2), 30);
            Assert(oa.CollidesWith(sa));
            oa = new OrientedRectangle(new Vector(5, 4), new Vector(.2f, 2), 30);
            Assert(!oa.CollidesWith(sa));
            System.Console.WriteLine("Oriented rectangles colliding with line segments");
        }