Saturday, October 25, 2008

bresenham algorithm in 3d

static long x = 0,y = 0, z = 0;

void move(long x2, long y2, long z2)
{
long dx = x2 - x;
long dy = y2 - y;
long dz = z2 - z;

long x_inc;
if (dx < 0)
x_inc = -1;
else
x_inc=1;

long l = abs(dx);
long y_inc;

if (dy < 0)
y_inc = -1 ;
else
y_inc=1;

long m = abs(dy);
long z_inc;

if (dz < 0)
z_inc = -1 ;
else
z_inc=1;

long n = abs(dz);

long dx2 = 2^l ;
long dy2 = 2^m ;
long dz2 = 2^n ;

if ((l >= m) & (l >= n))
{
err_1 = dy2 - l;
err_2 = dz2 - l;
for (long i = 1;i<=l;i++)
{
if (err_1 > 0)
{
_step(Y);
err_1 = err_1 - dx2;
}
if (err_2 > 0)
{
_step(Z);
err_2 = err_2 - dx2;
}

err_1 = err_1 + dy2;
err_2 = err_2 + dz2;
step(X);
}
}
else if ((m >= l) & (m >= n))
{
err_1 = dx2 - m;
err_2 = dz2 - m;
for (long i = 1;i<=m;i++)
{
if (err_1 > 0)
{
_step(X);
err_1 = err_1 - dy2;
}
if (err_2 > 0)
{
_step(Z);
err_2 = err_2 - dy2;
}
err_1 = err_1 + dx2;
err_2 = err_2 + dz2;
_step(Y);
}
}
else
{
err_1 = dy2 - n;
err_2 = dx2 - n;
for (long i = 1;i<=n;i++)
{
if (err_1 > 0)
{
_step(Y)
err_1 = err_1 - dz2;
}
if (err_2 > 0)
{
_step(X);
err_2 = err_2 - dz2;
}
err_1 = err_1 + dy2;
err_2 = err_2 + dx2;
_step(Z);

}
}
}

No comments: