示例#1
0
        public static bool Add(KDRectangle Rectangle)
        {
            if (tree.Size == 0)
            {
                tree.AddPoint(new double[] { Rectangle.LeftTop.X, Rectangle.RightBottom.X, Rectangle.LeftTop.Y, Rectangle.RightBottom.Y }, Rectangle);
                return(true);
            }
            else
            {
                NearestNeighbour <KDRectangle> pIter = tree.NearestNeighbors(new double[] { Rectangle.LeftTop.X, Rectangle.RightBottom.X, Rectangle.LeftTop.Y, Rectangle.RightBottom.Y }, 10);
                while (pIter.MoveNext())
                {
                    KDRectangle overlaper = pIter.Current;
                    if (doOverlap(Rectangle.LeftTop, Rectangle.RightBottom, overlaper.LeftTop, overlaper.RightBottom))
                    {
                        Console.WriteLine(Rectangle.Name);
                        Rectangle.Filled = true;
                        return(false);
                    }
                }

                tree.AddPoint(new double[] { Rectangle.LeftTop.X, Rectangle.RightBottom.X, Rectangle.LeftTop.Y, Rectangle.RightBottom.Y }, Rectangle);
                return(true);
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            // this is example form the image ExampleRectangles.png
            KDRectangle blue   = new KDRectangle(3, 3, 4, 5, "blue");
            KDRectangle Yellow = new KDRectangle(4, 5, 6, 6, "Yellow");
            KDRectangle red    = new KDRectangle(2, 5, 3, 6, "red");
            KDRectangle orange = new KDRectangle(1, 2, 5, 7, "orange");

            Console.WriteLine("Add-------------------------");
            //  Add(blue);
            Add(Yellow);
            Console.WriteLine("Add-----------------------------");
            Add(red);
            Console.WriteLine("Add-----------------------------");
            Add(blue);
            //  Add(orange);



            //List<KDRectangle> Rectangles = new List<KDRectangle>();
            //Random random = new Random();
            //// random generation of rectangles
            //for (int i = 0 ; i < 100000 ; i++) {

            //    double x1 = random.NextDouble() * (5000 - 0) + 0;
            //    double y1 = random.NextDouble() * (5000 - 0) + 0;

            //    double height = 28;
            //    double length = random.NextDouble() * (500 - 0) + 0;

            //    double x2 = x1 + length;
            //    double y2 = y1 + height;

            //    //Console.WriteLine(String.Format("x1={0} x2={1} y1={2} y2={3}", x1, x2, y1, y2));
            //    //  Console.WriteLine("i= " +i + " --------------------------------------------");
            //    //Thread.Sleep(100);
            //    Rectangles.Add(new KDRectangle(x1, y1, x2, y2, String.Format("x1={0} x2={1} y1={2} y2={3}", x1, x2, y1, y2)));
            //}

            //Stopwatch st = new Stopwatch();
            //st.Start();
            //foreach (KDRectangle Rectangle in Rectangles) {
            //    Add(Rectangle);
            //}
            ////st.Stop();


            //Console.WriteLine("ElapsedMilliseconds:    " + st.ElapsedMilliseconds);
            //Console.WriteLine("ElapsedTicks:    " + st.ElapsedTicks);



            Console.WriteLine("Done");
            Console.ReadLine();
        }