在c中创建网格

在c中创建网格,c,for-loop,grid,position,C,For Loop,Grid,Position,我需要在c中创建一个375 x 375网格,我需要创建一个由25(5x5)个极点组成的网格,这些极点的间距为75(375/5)个网格点。然后,我需要计算任意给定网格点离极点的距离。这不是一个可视化的网格,但我仍然不知道如何以编程方式创建这个网格设置。到目前为止,我已经创建了一个由两个整数x和y组成的“点”结构: typedef struct{ int x, y; }Point; 然后,我将网格定义为375x375点阵列,并在嵌套for循环中将x和y值分别设置为I和j。然而,我很难弄清楚

我需要在c中创建一个375 x 375网格,我需要创建一个由25(5x5)个极点组成的网格,这些极点的间距为75(375/5)个网格点。然后,我需要计算任意给定网格点离极点的距离。这不是一个可视化的网格,但我仍然不知道如何以编程方式创建这个网格设置。到目前为止,我已经创建了一个由两个整数x和y组成的“点”结构:

typedef struct{
    int x, y;
}Point;
然后,我将网格定义为375x375点阵列,并在嵌套for循环中将x和y值分别设置为
I
j
。然而,我很难弄清楚如何创建极点位置阵列。它是否应该是x和y值设置为
i*15
j*15
的5x5数组?如果是这样的话,那么我将如何将两个2D阵列一起使用。显然,我无法进行这样的计算:

        for(i = 0; i < 375; i ++){
        for(j = 0; j<375; j++){
            distance(polePos[i][j], grid[i][j]);
        }
    }
(i=0;i<375;i++)的
{

对于(j=0;j您没有指定极点应该放置在哪个列/行索引处,所以在下面我将它们从0开始分开75,因此极点位于列/行索引0、75、150、225、300、375处(所以6个极点)。这可能不是您所想的,但它会让您开始

#include "stdio.h"
#include "math.h"
double distance(double x, double y, double grid) {
    x = fmod(x, grid);
    y = fmod(y, grid); // <- these modulos makes us treat every interval like the interval 0...grid
    double dx = grid/2 - fabs(x -grid/2);
    double dy = grid/2 - fabs(y -grid/2);    
    //printf("%3u %3u %f %f \n", x, y, dx, dy);
    return sqrt(dx*dx+dy*dy);
}
int main(void) {
    int i; int j;
    double grid[375][375];
      for(i = 0; i < 375; i ++){
        for(j = 0; j<375; j++){
            grid[i][j] = distance(i, j, 75);
            printf("%3u %3u %f\n", i, j, grid[i][j]);
        }
    }
}
#包括“stdio.h”
#包括“math.h”
双距离(双x、双y、双栅格){
x=fmod(x,网格);
y=fmod(y,grid);//如果你的网格和极点是相关的,也许最好把它们放在同一个结构中

#include <stdbool.h>
typedef struct{
    int x, y;
    bool pole;
} Point;
#包括
类型定义结构{
int x,y;
布尔杆;
}点;
你可以看到它就像一个棋盘,每个棋盘上可能有或没有棋子


您可以在使用简单算法或经典算法后,例如,确定到某个极点的最短路径。

如果您有两个网格
polePos[5][5]
grid[375][375]
点,您可以使用以下算法计算距离:

double dist[375][375];

int pI = 0, pJ = 0;
for (int gI = 0; gI < 375; gI++) {
    while (pI + 1 < 5 &&
           abs(polePos[pI][pJ].x - grid[gI][0].x) >
           abs(polePos[pI + 1][pJ].x - grid[gI][0].x) {
        pI += 1;
    }

    for (int gJ = 0; gJ < 375; gJ++) {
        while (pJ + 1 < 5 &&
               abs(polePos[pI][pJ].y - grid[gI][gJ].y) >
               abs(polePos[pI][pJ + 1].y - grid[gI][gJ].y) {
            pJ += 1;
        }

        dist[gI][gJ] = distance(polePos[pI][pJ], grid[gI][gJ]);
    }

    pJ = 0;
}
double dist[375][375];
int pI=0,pJ=0;
对于(int-gI=0;gI<375;gI++){
而(pI+1<5&&
abs(polePos[pI][pJ].x-grid[gI][0].x)>
abs(polePos[pI+1][pJ].x-grid[gI][0].x){
pI+=1;
}
对于(int-gJ=0;gJ<375;gJ++){
而(pJ+1<5&&
abs(polePos[pI][pJ].y-grid[gI][gJ].y)>
abs(polePos[pI][pJ+1].y-grid[gI][gJ].y){
pJ+=1;
}
dist[gI][gJ]=距离(polePos[pI][pJ],grid[gI][gJ]);
}
pJ=0;
}

pI
pJ
包含离当前网格点最近的极点。

我认为你应该暂时忘记网格,专注于一个点。给定一个点,它离极点有多近?这是作业吗?然后请这样标记。你忽略了指出,如果你想在positi有一个极点在375上,你需要一个376x376的网格。@Lister先生,是的,没有电杆。只有到1.0的距离。