Esempio n. 1
0
        static void Main(string[] args)
        {
            IntersectionTypeTests();

            Console.WriteLine("\n\nTesty glowne");

            Disk[] disks;
            //////// Test 1 - 1 koło //////////

            disks = new Disk[] { new Disk(new Point(0, 0), 1) };
            Test(1, disks, true);

            ///// Test 2 - dużo równych kół //////////

            disks = new Disk[] {
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 1)
            };
            Test(2, disks, true);

            ///// Test 3 - normalny przypadek, jest rozwiązanie ///////////////

            disks = new Disk[] {
                new Disk(new Point(-1, 0), 1.5),
                new Disk(new Point(1, 0), 1.5),
                new Disk(new Point(0, 2), 2.5),
            };
            Test(3, disks, true);

            //// Test 4 - dwa koła rozłączne i trzecie je przecina //////////////////

            disks = new Disk[] {
                new Disk(new Point(-2, 0), 1.5),
                new Disk(new Point(2, 0), 1.5),
                new Disk(new Point(0, 2), 5),
            };
            Test(4, disks, false);


            ////// Test 5 - trzy koła przecinające się parami, brak rozwiązania ////////

            disks = new Disk[] {
                new Disk(new Point(0, 0), 0.55),
                new Disk(new Point(1, 0), 0.55),
                new Disk(new Point(0.5, 0.86), 0.55),
            };
            Test(5, disks, false);

            ////// Test 6 - tak jak 5, ale jedno koło jest zwielokrotnione ////////

            disks = new Disk[] {
                new Disk(new Point(0, 0), 0.55),
                new Disk(new Point(1, 0), 0.55),
                new Disk(new Point(0.5, 0.86), 0.55),
                new Disk(new Point(0.5, 0.86), 0.55),
                new Disk(new Point(0.5, 0.86), 0.55),
                new Disk(new Point(0.5, 0.86), 0.55),
                new Disk(new Point(0.5, 0.86), 0.55),
            };
            Test(6, disks, false);

            ////// Test 7 - byłoby rozwiązanie, gdyby nie dwa równe koła ////////

            disks = new Disk[] {
                new Disk(new Point(0, 0), 0.55),
                new Disk(new Point(1, 0), 0.55),
                new Disk(new Point(5, 5), 1),
                new Disk(new Point(5, 5), 1),
            };
            Test(7, disks, false);


            ////// Test 8 - pozytywny test wydajnościowy: dużo kół, jest rozwiązanie ////////

            int n = 100;

            disks = new Disk[n];
            Random rnd = new Random();

            for (int i = 0; i < n; ++i)
            {
                double x = rnd.NextDouble();
                double y = rnd.NextDouble();

                disks[i] = new Disk(new Point(x, y), 1);
            }
            Test(8, disks, true);

            ////// Test 9 - negatywny test wydajnościowy: dużo istotnie różnych kół, nie ma rozwiązania (nietrywialne) ////////

            List <Disk> listD = new List <Disk>();

            listD.Add(new Disk(new Point(0, 0), 55));
            listD.Add(new Disk(new Point(50, 86), 55));

            for (int i = 2; (i - 2) / 100.0 < 10; ++i)
            {
                listD.Add(new Disk(new Point(100.0 + (i - 2) / 100.0, 0), 55));
            }

            Test(9, listD.ToArray(), false);

            listD.Clear();

            ////// Test 10 - nieopisany

            n = 300;
            double a = (2 * Math.PI) / n;

            for (int i = 0; i < n; ++i)
            {
                listD.Add(new Disk(new Point(1 + Math.Cos(i * a) * 0.1, 2 + Math.Sin(i * a) * 0.1), 10.1));
            }
            Test(10, listD.ToArray(), true);

            ////// Test 11 - nieopisany

            listD.Add(new Disk(new Point(12.5, 12), 10.1));
            listD.Add(new Disk(new Point(12.5, -8), 10.1));
            Test(11, listD.ToArray(), false);

            disks = new Disk[] {
                new Disk(new Point(0, 0), 1),
                new Disk(new Point(0, 0), 2),
                new Disk(new Point(0, 0), 3),
            };
            Test(12, disks, true);

            disks = new Disk[] {
                new Disk(new Point(0, 0), 3),
                new Disk(new Point(0, 0), 2),
                new Disk(new Point(0, 0), 1),
            };
            Test(13, disks, true);

            Console.WriteLine();
        }
Esempio n. 2
0
 public ITTest(Point p1, double r1, Point p2, double r2, IntersectionType t, Point[] cp)
 {
     this.d1 = new Disk(p1, r1); this.d2 = new Disk(p2, r2); this.type = t; this.cp = cp;
 }