以蛇形模式遍历网格

Traversing grid in a snake like pattern

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

给定一个角单元格作为起点和方向(沿 x 轴或 y 轴)如何以蛇形模式遍历此网格?

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

谢谢!

尝试这 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()]);