我实现了一个A *算法,在两个坐标之间找到一条路,并且效果很好(非常好)。
之后,我需要显示一个圆圈,一步一步地走过路径
问题是,将坐标添加到列表中,然后(然后)显示它们的顺序是基于x,然后是y;有时候,它必须改变方向,例如: left,left,left,up,up,up,left,left,down,down,left,up,up,up。
我试图按x排序,然后是y,升序和降序,反之亦然,但是,由于方向的改变,对于循环逐步进行循环不起作用。
所以,我有一个想法,但我不确定,如何做到这一点:
首先:创建另一个列表,并为每个点设置id。 第二步:从路径的位置创建初始点,作为id 0 第三:添加其他坐标:
let coord = CLLocationCoordinate2D(latitude: 40.748433,longitude: -73.985656)
let region = MKCoordinateRegion(center: coord, span: MKCoordinateSpanMake(10, 10))
mymap.setRegion(region)
(这就是我到目前为止)
现在我的问题出现了,例如,它必须上升;在它下降之后:
yplus = 5,在下降之后......下次我必须检查y,它将需要yplus为4.同样的事情也可能发生在x上(除了我必须检查何时camino.x == ax + xplus等)
那么,在列表中,从点a到点b排序这些项目的方法是什么?
这是代码snipet,以防它有用:
private async void showAnimation(int size)
{
int idOfMap = 0;
int xplus = 1;
int yplus = 1;
Mapa a = new Mapa();
List<Mapa> resultMap = new List<Mapa>();
foreach (Mapa camino in Mapa.mapaCamino)
{
if (camino.x == initialStore_x && camino.y == initialStore_y)
{
a.x = camino.x;
a.y = camino.y;
a.id = idOfMap.ToString();
resultMap.Add(a);
idOfMap++;
}
for (var i = 0; i < Mapa.mapaCamino.Count; i++)
{
if (camino.x == a.x)
{
if (camino.y == (a.y + yplus) || camino.y == (a.y - yplus))
{
}
}
}
}