我有一个由笛卡尔坐标系上的四个角定义的矩形。矩形由大小相同的单元格组成。
给定一个角单元格作为起点和方向(沿 x 轴或 y 轴),我如何以蛇形图案遍历该网格?
例如,这里 (x4, y4) 是起始单元格,方向定义为沿 x 轴。蓝线描绘了所需的路径。
谢谢!
我有一个由笛卡尔坐标系上的四个角定义的矩形。矩形由大小相同的单元格组成。
给定一个角单元格作为起点和方向(沿 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()]);