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; }
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); } } }