给定一个矩形网格和一个点,我需要一个以锯齿形方式访问所有点的算法。
所以,我正在寻找一个函数 f ,如果像这样运行,会产生下面的图:
loop:
new_x, new_y = f(x, y, minx, miny, maxx, maxy)
if new_x == x and new_y == y:
end loop
有人可以帮我解决这样的算法吗?
答案 0 :(得分:2)
警告,我从1开始算:
这对代码来说有点繁琐但我无法看到任何特定的问题。
答案 1 :(得分:0)
假设0 <= X <= L,并且0 <= Y,给定索引N,您可以找到如下坐标:
Y =楼层(N / L)
X =(Y是偶数)? N mod L:L - (N mod L) - 1
- 编辑 -
我注意到这不符合您的循环结构约束,但无论如何它都可能有用。
答案 2 :(得分:0)
也许是这样的?
#include <iostream>
#include <utility>
std::pair<size_t, size_t>
foo (size_t N, size_t k) {
const auto r = k / N;
const auto c = (r & 1) == 0 ? k % N : N - k % N - 1;
return {r, c};
}
int
main () {
const size_t N = 10;
for (size_t i = 0; i < N * N; ++i) {
auto p = foo (N, i);
std::cout << "(" << p.first << ", " << p.second << ")\n";
}
std::cout << std::endl;
}