public RoadMap(ITrapezoidalMap trapezoidalMap, HashSet<ITrapezoid> forbiddenSpace)
        {
            this.trapezoidalMap = trapezoidalMap;
            this.forbiddenSpace = forbiddenSpace;
            this.junctionByTrapezoid = new Dictionary<ITrapezoid, Junction>();

            foreach (var trapezoid in trapezoidalMap.Trapezoids)
            {
                if (forbiddenSpace.Contains(trapezoid))
                    continue;

                var position = GetCenterPoint(trapezoid);
                var junction = new Junction(position);
                junctionByTrapezoid.Add(trapezoid, junction);
            }

            foreach (var vertical in trapezoidalMap.VerticalEdges)
            {
                if (forbiddenSpace.Contains(vertical.LeftTrapezoid))
                {
                    Debug.Assert(forbiddenSpace.Contains(vertical.RightTrapezoid));
                    continue;
                }

                var position = GetCenterPoint(vertical);
                var junction = new Junction(position);

                var leftJunction = junctionByTrapezoid[vertical.LeftTrapezoid];
                Road.Connect(leftJunction, junction);
                var rightJunction = junctionByTrapezoid[vertical.RightTrapezoid];
                Road.Connect(rightJunction, junction);
            }
        }
Пример #2
0
        public RoadMap(ITrapezoidalMap trapezoidalMap, HashSet <ITrapezoid> forbiddenSpace)
        {
            this.trapezoidalMap      = trapezoidalMap;
            this.forbiddenSpace      = forbiddenSpace;
            this.junctionByTrapezoid = new Dictionary <ITrapezoid, Junction>();

            foreach (var trapezoid in trapezoidalMap.Trapezoids)
            {
                if (forbiddenSpace.Contains(trapezoid))
                {
                    continue;
                }

                var position = GetCenterPoint(trapezoid);
                var junction = new Junction(position);
                junctionByTrapezoid.Add(trapezoid, junction);
            }

            foreach (var vertical in trapezoidalMap.VerticalEdges)
            {
                if (forbiddenSpace.Contains(vertical.LeftTrapezoid))
                {
                    Debug.Assert(forbiddenSpace.Contains(vertical.RightTrapezoid));
                    continue;
                }

                var position = GetCenterPoint(vertical);
                var junction = new Junction(position);

                var leftJunction = junctionByTrapezoid[vertical.LeftTrapezoid];
                Road.Connect(leftJunction, junction);
                var rightJunction = junctionByTrapezoid[vertical.RightTrapezoid];
                Road.Connect(rightJunction, junction);
            }
        }