Beispiel #1
0
        public void GetEdges(int x, int y, List<GridEdge> edges, float[,] weights = null)
        {

            int edge = Edges[x, y];
            if (edge == 0) return;

            for (int i = 0; i < 8; i++)
            {
                int xi = x + D8.OFFSETS[i, 0];
                int yi = y + D8.OFFSETS[i, 1];

                if (xi < 0 || xi > Width - 1) continue;
                if (yi < 0 || yi > Height - 1) continue;

                if ((edge & 1 << i) == 0) continue;

                var e = new GridEdge(x, y, xi, yi);

                if (weights != null)
                    e.Weight = weights[x, y] + weights[xi, yi];

                edges.Add(e);

                edges.Add(new GridEdge(x, y, xi, yi));
            }

        }
Beispiel #2
0
        public List<GridEdge> GetAllEdges(float[,] weights = null)
        {
            List<GridEdge> edges = new List<GridEdge>(EdgeCount);

            for (int y = 0; y < Height; y++)
            {
                for (int x = 0; x < Width; x++)
                {
                    int edge = Edges[x, y];
                    if (edge == 0) continue;

                    for (int i = 0; i < 8; i++)
                    {
                        int xi = x + D8.OFFSETS[i, 0];
                        int yi = y + D8.OFFSETS[i, 1];

                        if (xi < 0 || xi > Width - 1) continue;
                        if (yi < 0 || yi > Height - 1) continue;

                        if ((edge & 1 << i) == 0) continue;

                        var e = new GridEdge(x, y, xi, yi);

                        if (weights != null)
                            e.Weight = weights[x, y] + weights[xi, yi];

                        edges.Add(e);
                    }
                }
            }

            return edges;
        }