Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从中心循环XYZ_C#_Arrays_Loops_3d_For Loop - Fatal编程技术网

C# 从中心循环XYZ

C# 从中心循环XYZ,c#,arrays,loops,3d,for-loop,C#,Arrays,Loops,3d,For Loop,我有一个三维数组,我想用C#中的值填充它。通过一次循环一个维度,它将从一个角开始,并成行工作,直到在另一个角结束 标准回路: for (int x = 0; x < 10; x++) for (int y = 0; y < 10; y++) for (int z = 0; z < 10; z++) { // fill value } for(int x=0;x

我有一个三维数组,我想用C#中的值填充它。通过一次循环一个维度,它将从一个角开始,并成行工作,直到在另一个角结束

标准回路:

for (int x = 0; x < 10; x++)
   for (int y = 0; y < 10; y++)
      for (int z = 0; z < 10; z++)
         {
            // fill value
         }
for(int x=0;x<10;x++)
对于(int y=0;y<10;y++)
对于(intz=0;z<10;z++)
{
//填充值
}
我想循环相同的值,但从数组的中心开始,慢慢向外移动,这样,如果我在三维空间中观察正在填充的数组,它将从中间慢慢增长为一个球(或立方体)


有什么好主意吗?填充立方体和填充球体(离中间最近的距离)的想法都很棒

您可以使用BFS之类的工具
C风格的伪代码,而不是C#:

类点{intx,y,z;};
队列q;
布尔使用[100][100][100]//全是假的。将点添加到队列时为true
点向量[]={(0,0,1),(0,0,-1),(0,1,0),(0,-1,0),(1,0,0),(-1,0,0)}
q、 推(点(50,50,50))//起点
使用[50][50][50]=正确;
而(!q.empty()){
点电流=q.前();
//使用cur;
q、 pop();

对于(i=0;i您可以使用BFS
C风格的伪代码,而不是C#:

类点{intx,y,z;};
队列q;
bool使用了[100][100][100];//全部为false。将点添加到队列时为true
点向量[]={(0,0,1),(0,0,-1),(0,1,0),(0,-1,0),(1,0,0),(-1,0,0)}
q、 推(点(50,50,50));//起点
使用[50][50][50]=正确;
而(!q.empty()){
点电流=q.前();
//使用cur;
q、 pop();

对于(i=0;我同意这个答案!我将第一个解决方案编码为C#并进行了测试。我想知道它有多贵,因为我们必须声明一个大小相同的数组,但我想它是必需的。最后两个解决方案也可以工作,但可能太贵了,无法广泛使用。尽管如此,如果需要,还是很有用!谢谢您花时间来h帮助我我想我应该制作一个gif给你看结果:)!(我如何让这个图像标签工作?)我注意到它形成的是钻石形状而不是立方体。我本来打算制作一个立方体,但就我目前的使用而言,钻石也可以。谢谢你的回答!我将第一个解决方案编码为C#并进行了测试。我想知道它有多贵,因为我们必须声明一个相同大小的数组,但我想这是必需的。最后两个解决方案是w也可以,但可能太贵,无法广泛使用。如果需要,仍然很有用!谢谢你花时间帮助我,我想我应该制作一个gif让你看到结果:)(我如何让这个图像标签工作?)我注意到它形成的是钻石形状而不是立方体。我本来打算制作一个立方体,但就我目前的使用情况而言,钻石也可以。
class Point{int x,y,z;};

queue<Point> q;
bool used[100][100][100]; //all false. true when add point to queue
Point vectors[]={(0,0,1),(0,0,-1),(0,1,0),(0,-1,0),(1,0,0),(-1,0,0)}
q.push(Point(50,50,50)); //start point
used[50][50][50]=true;
while(!q.empty()){
     Point cur=q.front();
     //use cur;
     q.pop();
     for(i=0;i<6;++i){
         if(!used[cur+vectors[i]] && (cur+vectors[i] is in our diapason)){
             q.push(cur+vectors[i]);
             used[cur+vectors[i]]=true;
         }
     }
}
Point points[];
for (int x = 0; x < 10; x++)
    for (int y = 0; y < 10; y++)
        for (int z = 0; z < 10; z++)
            {
                 add to point array
            }

sort points[] by function r() (if r(a)<r(b) then a before b)

loop points here

r(a)=sqrt((a.x-5)^2+(a.y-5)^2+(a.z-5)^2) for ball
r(a)=max(abs(a.x-5),abs(a.y-5),abs(a.z)-5) for cube