您可以使用類似BFS
C風格的僞代碼,不C#:
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;
}
}
}
它將由Manhettan距離填充區域。因此,這將立方體,但角球到頂部和底部
你也可以使用這個天真的解決方案(僞太):
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
感謝您的回答!我將第一個解決方案編碼到C#中並進行了測試。我不知道這是多麼昂貴,因爲我們必須聲明一個相同大小的數組,但我想這是需要的。 最後兩種解決方案也可以工作,但對於廣泛使用可能太昂貴。如果需要,仍然有用!謝謝 因爲你花了你的時間來幫助我,我想我會讓你看到結果的GIF :) ![GIF](http://smars.se/misc/box.gif) (How我得到這個圖像標籤的工作?) – jsmars
我注意到,它形成了一個鑽石形狀,而不是一個立方體。我正在計劃一個立方體,但對於我目前的使用情況來說,一顆鑽石也可以工作。 – jsmars