public double getDistance()
        {
            // Retrieve the environment
            Environment env         = Environment.Instance;
            double      maxDistance = -1;

            // Create the range segment
            this.range    = new Segment();
            range.Start.X = env.AgentPosition.X;
            range.Start.Y = env.AgentPosition.Y;
            range.End.X   = env.AgentPosition.X;
            range.End.Y   = env.AgentPosition.Y + length;
            range         = range.Rotate(env.AgentAngle + angleOffset);

            // Go through the list of segments, not neat O(n) but execution
            // fast enough for this simulation purpose
            foreach (Segment s in env.Segments)
            {
                Point p;
                if ((p = range.Intersects(s)) != null)
                {
                    double v = p.Distance(range.Start);
                    if (v < maxDistance || maxDistance == -1)
                    {
                        maxDistance = v;
                    }
                }
            }

            return(maxDistance);
        }
        public double getDistance()
        {
            // Retrieve the environment
            Environment env = Environment.Instance;
            double maxDistance = -1;

            // Create the range segment
            this.range = new Segment();
            range.Start.X = env.AgentPosition.X;
            range.Start.Y = env.AgentPosition.Y;
            range.End.X = env.AgentPosition.X;
            range.End.Y = env.AgentPosition.Y + length;
            range = range.Rotate(env.AgentAngle + angleOffset);

            // Go through the list of segments, not neat O(n) but execution
            // fast enough for this simulation purpose
            foreach (Segment s in env.Segments)
            {
                Point p;
                if ((p = range.Intersects(s)) != null)
                {
                    double v = p.Distance(range.Start);
                    if (v < maxDistance || maxDistance == -1)
                    {
                        maxDistance = v;
                    }
                }
            }

            return maxDistance;
        }
Beispiel #3
0
        public static void Main()
        {
            List<Segment> seg = new List<Segment>();
            Random rand = new Random();
            Segment vector = new Segment(new Point(rand.Next(), rand.Next()), new Point(rand.Next(), rand.Next()));
            Stopwatch stopwatch = new Stopwatch();

            for (int i = 1; i <= 10000; i = i * 10)
            {
                // create the test set
                seg.Clear();
                for (int j = 0; j < i; j++)
                    seg.Add(new Segment(new Point(rand.Next(), rand.Next()), new Point(rand.Next(), rand.Next())));

                // benchmark
                stopwatch.Start();
                for (int j = 0; j < 100; j++)
                {
                    foreach (Segment s in seg)
                    {
                        vector.Intersects(s);
                    }
                }
                stopwatch.Stop();

                // display
                using (TextWriter fs = new StreamWriter("bench.txt", true))
                {
                    Console.Out.WriteLine("{0} {1}", i, stopwatch.ElapsedMilliseconds / 100);
                }
            }
        }
Beispiel #4
0
        public static void Main()
        {
            List<Segment> seg = new List<Segment>();
            Random rand = new Random();
            Segment vector = new Segment(new Point(rand.Next(), rand.Next()), new Point(rand.Next(), rand.Next()));
            Stopwatch stopwatch = new Stopwatch();


            for (int i = 1; i <= 10000; i = i * 10)
            {
                // create the test set
                seg.Clear();
                for (int j = 0; j < i; j++)
                    seg.Add(new Segment(new Point(rand.Next(), rand.Next()), new Point(rand.Next(), rand.Next())));

                // benchmark
                stopwatch.Start();
                for (int j = 0; j < 100; j++)
                {
                    foreach (Segment s in seg)
                    {
                        vector.Intersects(s);
                    }
                }
                stopwatch.Stop();

                // display
                using (TextWriter fs = new StreamWriter("bench.txt", true))
                {
                    Console.Out.WriteLine("{0} {1}", i, stopwatch.ElapsedMilliseconds / 100);
                }
            }
        }