我的网格尺寸为2000x2000。我在网格上存储了一些点,我想将其中一些连接起来,但是连接需要是从一个点到另一个点的最近路径。 我有:
private static readonly Dictionary<double,Point> ExistingPoints = new Dictionary<double, Point>();
private static Point[,] gridMatrix = new Point[200, 200];
其中ExistingPoints
是放置在网格上的点的字典,而gridMatrix
包含字典中的相同点,但是他的row
和column
是除以点的x和y以10表示,因此可以在网格上表示。
那么如何找到从一个点到另一个点的最近路径?
编辑
路径只能在网格上,这意味着它只能在直线上,不能是直线,因此当我需要上/下/左/右时,它必须成90度
答案 0 :(得分:0)
Okey我会这样做:
List<Point> path = new List<Point>();
Point startingPoint = new Point(1000, 1000);
Point targetPoint = new Point(500, 500);
Point currentPos = startingPoint;
//Level in Y
while (currentPos.Y != targetPoint.Y)
{
path.Add(new Point(currentPos.X, currentPos.Y);
currentPos.Y += (currentPos.Y > targetPoint.Y ? -1 : 1);
}
//Level in X
while(currentPos.X != targetPoint.X)
{
path.Add(new Point(currentPos.X, currentPos.Y);
currentPos.X += (currentPos.X > targetPoint.X ? -1 : 1);
}
//Draw the lines in steps
for (int i = 0; i < path.Count()-1; i++)
{
DrawLineBetween(path[i], path[i + 1]);
}
DrawLineBetween(path.Last(), targetPoint);
我没有测试代码,但是可以编译并且理论上可以工作。 DrawLineBetween
方法当然仍然必须实现,但我想您这里已经准备就绪。
当然,您可以将X和Y调平组合成一个循环,然后按“阶梯”模式进行。