从中心到角落读取阵列2d

时间:2015-07-24 14:11:42

标签: java arrays loops 2d center

因此,对于我正在研究的这个java项目,我需要一个循环,从中心首先读取2d数组,然后是4个adjecent值然后是其中的角,并继续这样做直到它到达并完成最外层。我需要它来处理所有奇数尺寸的方形2d阵列。我制作了这张图片来阐明我的目标:http://gyazo.com/80ed4502cb16795d37b75a14ee57f565。我个人无法实现这一目标。感谢您的时间!任何一段伪代码或java代码都是受欢迎的!

1 个答案:

答案 0 :(得分:0)

您可以在逻辑上重新定义网格,使中心为0,0。 然后,根据距中心的距离对每个网格坐标进行排序。 这假设网格是奇数宽度。

例如:

class Point
{
    int x;
    int y;
}

Point gridCenter;


Comparator<Point> comparator = new Comparator<Point>()
{
    @Override
    public int compare(Point arg0, Point arg1) 
    {
        int x = arg0.x - gridCenter.x;
        int y = arg0.y - gridCenter.y;

        int distance0 = x*x + y*y;

        x = arg1.x - gridCenter.x;
        y = arg1.y - gridCenter.y;
        int distance1 = x*x + y*y;


        return distance0 - distance1;
    }
};

void test()
{
    int width = 11;
    int height = 13;

    gridCenter = new Point();
    gridCenter.x = width/2;
    gridCenter.y = height/2;

    List<Point> points = new ArrayList<>();

    for(int x=0;x<width;x++)
    {
        for(int y=0;y<height;y++)
        {
            Point p = new Point();
            p.x = x;
            p.y = y;

            points.add(p);
        }
    }

    Collections.sort(points, comparator);

    for(Point p : points)
    {
        System.out.println(p.x + "," + p.y);
    }

}

如果你想保证它在排序中选择左边,顶边右边,底边,你可以略微偏向中心。