Позиционирование в canvas

#c#

#c#

Вопрос:

У меня есть матрица с размерами matrix [высота, ширина], эта матрица инициализируется всеми 0, затем я размещаю 4, которые фактически являются некоторыми рисунками (прямоугольниками) в моем canvas. Позже я хочу соединить те чертежи (прямоугольники), которые равны «4», с помощью плоских линий, но по какой-то причине мой цикл while застревает и не завершает его. Вот мой код, который я использую, я надеюсь, этого достаточно, чтобы вы поняли. Я определил координаты для ввода и вывода соединения.

 public Point [] Again()
{
    Position startPosition = new Position(dockingStartPositionX, dockingStartPositionY);
    Position endPosition = new Position(dockingEndPositionX, dockingEndPositionY);

    List<Point> pointList = new List<Point>();
    Position currentPosition = startPosition;
    //Ne zeli mi izac iz ove while petlje jer dode do pozicije di je tablica i onda tamo zapne ali ne bi trebalo, trebalo bi svejedno krenut dalje
    while (true)
    {
        if (currentPosition.x == endPosition.x amp;amp; currentPosition.y == endPosition.y) break;

        List<Position> directions = new List<Position>
        {
                new Position(currentPosition.x  1,currentPosition.y),
                new Position(currentPosition.x -1,currentPosition.y),
                new Position(currentPosition.x ,currentPosition.y 1),
                new Position(currentPosition.x ,currentPosition.y-1)
        };

        double distance = Distance(currentPosition, endPosition);
        foreach (Position next in directions)
        {

            if (!OccupiedByTable(next))
            {
                double newDistance = Distance(next, endPosition);
                if (newDistance < distance)
                    currentPosition = next;

            }
        }
        pointList.Add(new Point(currentPosition.x, currentPosition.y));
        matrix[currentPosition.y, currentPosition.x] = 2;
    }
    Point[] points = pointList.ToArray();
    return points;
    }

        private bool OccupiedByTable(Position pos)
    {
        if (matrix[pos.y, pos.x] == 4)
            return true;
        return false;
    }
        private double Distance(Position pos1, Position pos2)
    {
        return Math.Sqrt((pos1.x - pos2.x) * (pos1.x - pos2.x)   (pos1.y - pos2.y) * (pos1.y - pos2.y));
    }
  

Комментарии:

1. Поставьте точку останова currentPosition = next; , чтобы посмотреть, будет ли она когда-либо выполнена.

2. @JohnnyMopp Он выполняется. Я знаю это, потому что у меня есть более одного случая, и он застревает в одном случае, потому что номер «4» — это один из способов, и я не знаю, почему это было бы проблемой, потому что у него есть 3 других решения