Language agnostic 生成菱形周长上的所有点
给出了一系列这样的钻石: 如何为每个钻石生成一个黑方块列表?假设红方块在{0,0}处,黑方块的坐标是相对于该坐标给出的。给定钻石的示例:Language agnostic 生成菱形周长上的所有点,language-agnostic,geometry,coordinates,Language Agnostic,Geometry,Coordinates,给出了一系列这样的钻石: 如何为每个钻石生成一个黑方块列表?假设红方块在{0,0}处,黑方块的坐标是相对于该坐标给出的。给定钻石的示例: 0 = {0, 0} 1 = {-1, 0}, {0, -1}, {0, 1}, {1, 0} 2 = {-2, 0}, {-1, -1}, {-1, 1}, {0, -2}, {0, 2}, {1, -1}, {1, 1}, {2, 0} 3 = {-3, 0}, {-2, -1}, {-2, 1}, {-1, -2}, {-1, 2}, {0, -3},
0 = {0, 0}
1 = {-1, 0}, {0, -1}, {0, 1}, {1, 0}
2 = {-2, 0}, {-1, -1}, {-1, 1}, {0, -2}, {0, 2}, {1, -1}, {1, 1}, {2, 0}
3 = {-3, 0}, {-2, -1}, {-2, 1}, {-1, -2}, {-1, 2}, {0, -3}, {0, 3}, {1, -2}, {1, 2}, {2, -1}, {2, 1}, {3, 0}
观测值(给定n是从原点到角点的距离):
- 每个坐标对的和总是n或-n
- 除0外,列表的大小始终为4n
- |x |+| y |=n是钻石的笛卡尔方程
void diamond_points(int n) {
for (int x = -n; x <= n; ++x) {
for (int y = -n; y <= n; ++y) {
if (abs(x) + abs(y) == n) {
printf("{%d, %d}, ", x, y);
}
}
}
}
void diamond_点(int n){
对于(intx=-n;x有,带O(n)
for(int x=-n;x 0){
printf(“{%d,%d},”,x,-y);
}
}
有点微优化,但我认为如果你把y==0的情况带到循环之外,你可以删除if语句:好吧,如果你每毫秒计算一次值,那么你应该试着去掉所有可能的if
s:)@DragonDePlatino
for(int x = -n; x <= n; x++) {
int y = n - abs(x);
printf("{%d, %d}, ", x, y);
if(y > 0) {
printf("{%d, %d}, ", x, -y);
}
}