示例#1
0
        public void TestMappingFromReal(double x, double y, int expectedX, int expectedY)
        {
            var c = GridCoordinatePair.FromReal(x, y);

            Assert.Equal(expectedX, c.X);
            Assert.Equal(expectedY, c.Y);
        }
示例#2
0
        public void TestMappingToReal()
        {
            var c = new GridCoordinatePair(0, -1);

            var(x, y) = GridCoordinatePair.ToReal(c);
            Assert.Equal(0.5, x);
            Assert.Equal(-0.5, y);
        }
示例#3
0
        public void TestTranslation(int x, int y)
        {
            var c  = new GridCoordinatePair(10, 10);
            var c2 = c.Translation(x, y);

            Assert.Equal(10 + x, c2.X);
            Assert.Equal(10 + y, c2.Y);
        }
示例#4
0
 public bool AddPosition(GridCoordinatePair position)
 {
     if (_positions.Contains(position))
     {
         return(false);
     }
     _positions.Add(position);
     return(true);
 }
示例#5
0
 public GridSegment(GridCoordinatePair a, GridCoordinatePair b)
 {
     if (a.X == b.X && a.Y == b.Y)
     {
         throw new ArgumentException("Segment must not be degenerate");
     }
     _a = a;
     _b = b;
 }
示例#6
0
        public GridCircle(GridCoordinatePair center, int radius)
        {
            if (radius < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(radius), radius, null);
            }

            _center = center;
            _radius = radius;
        }
示例#7
0
        public GridFan(GridCoordinatePair origin, int radius, Grid8Direction direction)
        {
            if (radius < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(radius), radius, null);
            }

            _origin    = origin;
            _radius    = radius;
            _direction = direction;
        }
示例#8
0
        public void TestEquality()
        {
            var c1 = new GridCoordinatePair(2, 2);
            var c2 = new GridCoordinatePair(2, 2);
            var c3 = new GridCoordinatePair();
            var c4 = new GridCoordinatePair();

            Assert.Equal(c1, c2);
            Assert.True(c1 == c2);
            Assert.Equal(c3, c4);
            Assert.NotEqual(c1, c3);
            Assert.True(c1 != c3);
        }
示例#9
0
        public static IEnumerable <GridCoordinatePair> GetFloodFillCoordinates(
            GridCoordinatePair start,
            GridCoordinatePair[] walls,
            GridBoundingBox bounds)
        {
            var fill = new List <GridCoordinatePair>();

            if (walls == null)
            {
                return(fill);
            }
            if (!bounds.Contains(start) || ArrayContains(start, walls))
            {
                return(fill);
            }
            var queue = new Queue <GridCoordinatePair>();

            queue.Enqueue(start);
            while (queue.Count > 0)
            {
                var c = queue.Dequeue();
                if (fill.Contains(c) || ArrayContains(c, walls) || !bounds.Contains(c))
                {
                    continue;
                }

                fill.Add(c);

                queue.Enqueue(c.Translation(0, -1));
                queue.Enqueue(c.Translation(0, 1));
                queue.Enqueue(c.Translation(-1, 0));
                queue.Enqueue(c.Translation(1, 0));
            }

            return(fill);
        }
示例#10
0
 public SquareMapField GetFieldAt(GridCoordinatePair coordinates)
 {
     return(HasFieldAt(coordinates) ? _fields[coordinates] : null);
 }
示例#11
0
        public void TestEuclideanDistance(int x, int y, double expected)
        {
            var c = new GridCoordinatePair(0, 0);

            Assert.Equal(expected, c.EuclideanDistance(x, y), 3);
        }
示例#12
0
 public bool RemovePosition(GridCoordinatePair position)
 {
     return(_positions.Count != 1 && _positions.Remove(position));
 }
示例#13
0
 public bool Contains(GridCoordinatePair position)
 {
     return(_positions.Contains(position));
 }
示例#14
0
        public void TestManhattanDistance(int x, int y, int expected)
        {
            var c = new GridCoordinatePair(0, 0);

            Assert.Equal(expected, c.ManhattanDistance(x, y));
        }
示例#15
0
 public GridPoint(GridCoordinatePair position)
 {
     Position = position;
 }
示例#16
0
 public bool HasFieldAt(GridCoordinatePair coordinates)
 {
     return(Shape.Contains(coordinates));
 }
示例#17
0
 public SquareMapField(GridCoordinatePair coordinates, Feature area)
 {
     Coordinates = coordinates;
     Area        = area;
 }
示例#18
0
 private IEnumerable <SquareMapField> FindAdjacentFields(GridCoordinatePair coordinates, bool includeDiagonallyAdjacent = false)
 {
     return(FindAdjacentFields(coordinates.X, coordinates.Y, includeDiagonallyAdjacent));
 }
示例#19
0
 private static bool ArrayContains(GridCoordinatePair c, GridCoordinatePair[] walls)
 {
     return(Array.IndexOf(walls, c) != -1);
 }