0

我有一个由笛卡尔坐标系上的四个角定义的矩形。矩形由大小相同的单元格组成。

给定一个角单元格作为起点和方向(沿 x 轴或 y 轴),我如何以蛇形图案遍历该网格?

例如,这里 (x4, y4) 是起始单元格,方向定义为沿 x 轴。蓝线描绘了所需的路径。

在此处输入图像描述

谢谢!

4

1 回答 1

0

尝试 4 对点来找到定义框的相反点。然后你有一个起点和一对相反的点。在您的情况下,followAlongX 将是一个输入,因此不需要测试方向,但我添加了一个经典的决策文本。

最后,尝试类似(Java,用记事本编写,未测试):

int stepY, stepX, yMin, yMax, yOpposite, yStart, xMin, xMax, xOpposite, xStart;
if (yOpposite > yStart) {
    stepY = 1;
    yMin = yStart;
    yMax = yOpposite;
}
else {
    stepY = -1;
    yMax = yStart;
    yMin = yOpposite;
}

if (xOpposite > xStart) {
    stepX = -1;
    xMin = xStart;
    xMax = xOpposite;
}
else {
    stepX = 1;
    xMin = xOpposite;
    xMax = xStart;
}

// boolean followAlongX = false;
// if (xMax-xMin>yMax-yMin) {
//     loopOnX = true;
// }

List<Points> path = new ArrayList<>();
if (followAlongX) {
    for (int i=yMin; i!=yMax; i+=stepY) {
        for (int j=xmin; j!=xmax; j+=stepX) {
            path.add(new Point(i,j));
        }
        stepX = -stepX;
        int temp = xMin;
        xMin = xMax;
        xMax = temp;
    }
}
else {
    for (int j=xmin; j!=xmax; j+=stepX) {
        for (int i=yMin; i!=yMax; i+=stepY) {
            path.add(new Point(i,j));
        }
        stepY = -stepY;
        int temp = yMin;
        yMin = yMax;
        yMax = temp;
    }
}
return path.toArray(new Point[path.size()]);
于 2015-11-20T18:07:58.023 回答