#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 других решения