C # Получение близлежащих точек на сетке в радиусе - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть сетка с координатами X и Y.В этой сетке у меня есть отправная точка, и я хочу получить все соседние ячейки в пределах определенного радиуса.

Я сделал следующую функцию, которая идет +1 в каждом направлении и возвращает пятна.

    public List<Point> GetLocationsStraightLine(Point fromLocation, int Distance)
    {
        var nearbySpots = new List<Point>();
        int StartDistance = 1;

        while (StartDistance < Distance)
        {
            nearbySpots.Add(new Point(fromLocation.X, (short)(fromLocation.Y - StartDistance)));
            nearbySpots.Add(new Point((short)(fromLocation.X + StartDistance), fromLocation.Y));
            nearbySpots.Add(new Point(fromLocation.X, (short)(fromLocation.Y + StartDistance)));
            nearbySpots.Add(new Point((short)(fromLocation.X - StartDistance), fromLocation.Y));

            StartDistance++;
        }

        return nearbySpots;
    }

Возвращает все точки по прямой от моей начальной точки.Однако я хочу также взять промежуточные пятна.

Это то, что я сейчас получаю (извините за плохое изображение)

изображение точек, которые я возвращаю

Однако я хочу иметь возможность ввести расстояние 2 и получить полный квадрат вокруг начального местоположения.

что я хочу получить полный квадрат с диагнозом

Поэтому я спрашиваю, есть ли какой-нибудь простой способ получить диагонали, а не просто прямую линию от моей начальной точки?

1 Ответ

0 голосов
/ 10 ноября 2018

Поскольку это прямоугольник, вы можете использовать очень простой подход. Предполагая, что Distance всегда положительно:

public List<Point> GetLocationsStraightLine(Point fromLocation, int Distance) {

    var nearbySpots = new List<Point>();

    for (int i = -Distance; i <= Distance; ++i)
        for (int j = -Distance; j <= Distance; ++j)
            nearbySpots.Add(new Point(fromLocation.X + j, fromLocation.Y + i));

    return nearbySpots;

}

Идея состоит в том, чтобы начать с верхней левой точки и добавлять каждую точку в прямоугольнике строка за строкой, заканчиваясь в нижней правой точке.

...