Walkin' on grid
void GridWalk(int x0,int y0,int z0,int x1,int y1,int z1)
{
int dx,dy,dz,sx,sy,sz,x,y,z;
unsigned limx,limy,limz,min,steps; /* for dx, dy, dz<255 */
sx=1; dx=x1-x0; if (dx<0) { dx=-dx;sx=-1; }
sy=1; dy=y1-y0; if (dy<0) { dy=-dy;sy=-1; }
sz=1; dz=z1-z0; if (dz<0) { dz=-dz;sz=-1; }
if (dx<dy && dx<dz) { min=dx; steps=dy*dz; }
else if (dy<dx && dy<dz) { min=dy; steps=dx*dz; }
else { min=dz; steps=dx*dz; }
limx=dy*dz;limy=dx*dz;limz=dx*dy;
x=x0;y=y0;z=z0;xd=0;yd=0;zd=0;
steps++; /* for process x0,y0,z0 too */
for(;steps--;)
{
ProcessGridNode(x,y,z);
xd+=min;yd+=min;zd+=min;
while (xd>=limx) { x+=sx;xd-=limx; }
while (yd>=limy) { y+=sy;yd-=limy; }
while (zd>=limz) { z+=sz;zd-=limz; }
}
}
If you have questions, ask me.
---------------------------------------
Be optimized!
tigra
icq 429048706
