如何将这些点(x,y)按顺序排列?

时间:2016-01-16 05:56:03

标签: c# list windows-phone-8.1 pathfinder

我实现了一个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))
                    {

                    }
                }
            }

        }

0 个答案:

没有答案