Exemplo n.º 1
0
void draw_horz_line(int x0, int x1, int y, double z0, double z1, screen s, color c){
  int i;
  double z = z0;
  if(x0 <= x1){
    double m = (z1 - z0) / (x1 - x0);
    for (i = x0; i <= x1; i++){
      plot_z(s,c,i,y,z);
      z += m;
    }
  }else{
    double m = (z1 - z0) / (x0 - x1);
    for (i = x1; i <= x0; i++){
      plot_z(s,c,i,y,z);
      z += m;
    }
  }
}
Exemplo n.º 2
0
void draw_line(int x0, int y0, double z0, int x1, int y1, double z1, screen s, color c) {
 
  int x, y, d, dx, dy;
  double m,z;

  x = x0;
  y = y0;
  
  //swap points so we're always draing left to right
  if ( x0 > x1 ) {
    x = x1;
    y = y1;
    x1 = x0;
    y1 = y0;
  }

  m = (z1 - z0) / (x1 - x0);

  //need to know dx and dy for this version
  dx = (x1 - x) * 2;
  dy = (y1 - y) * 2;

  //positive slope: Octants 1, 2 (5 and 6)
  if ( dy > 0 ) {

    //slope < 1: Octant 1 (5)
    if ( dx > dy ) {
      d = dy - ( dx / 2 );
  
      while ( x <= x1 ) {
	plot_z(s, c, x, y, z);

	if ( d < 0 ) {
	  x = x + 1;
	  z += m;
	  d = d + dy;
	}
	else {
	  x = x + 1;
	  z += m;
	  y = y + 1;
	  d = d + dy - dx;
	}
      }
    }

    //slope > 1: Octant 2 (6)
    else {
      d = ( dy / 2 ) - dx;
      while ( y <= y1 ) {

	plot_z(s, c, x, y, z );
	if ( d > 0 ) {
	  y = y + 1;
	  d = d - dx;
	}
	else {
	  y = y + 1;
	  x = x + 1;
	  z += m;
	  d = d + dy - dx;
	}
      }
    }
  }

  //negative slope: Octants 7, 8 (3 and 4)
  else { 

    //slope > -1: Octant 8 (4)
    if ( dx > abs(dy) ) {

      d = dy + ( dx / 2 );
  
      while ( x <= x1 ) {

	plot_z(s, c, x, y, z);

	if ( d > 0 ) {
	  x = x + 1;
	  z += m;
	  d = d + dy;
	}
	else {
	  x = x + 1;
	  z += m;
	  y = y - 1;
	  d = d + dy + dx;
	}
      }
    }

    //slope < -1: Octant 7 (3)
    else {

      d =  (dy / 2) + dx;

      while ( y >= y1 ) {
	
	plot_z(s, c, x, y, z );
	if ( d < 0 ) {
	  y = y - 1;
	  d = d + dx;
	}
	else {
	  y = y - 1;
	  x = x + 1;
	  z += m;
	  d = d + dy + dx;
	}
      }
    }
  }
}
Exemplo n.º 3
0
void draw_line_z(int x0, int y0, int z0, int x1, int y1, int z1, screen s, color c) {
 
  double zees[XRES][YRES];
  int z_x,z_y;
  int x, y, z, d, dx, dy, dz, dd;

  x = x0;
  y = y0;
  z = z0;
  
  //swap points so we're always draing left to right
  if ( x0 > x1 ) {
    x = x1;
    y = y1;
    z = z1;
    x1 = x0;
    y1 = y0;
    z1 = z0;
  }

  //need to know dx and dy for this version
  dx = (x1 - x) * 2;
  dy = (y1 - y) * 2;
  dz = (z1 - z) * 2;

  //positive slope: Octants 1, 2 (5 and 6)
  if ( dy > 0 ) {

    //slope < 1: Octant 1 (5)
    if ( dx > dy ) {
      d = dy - ( dx / 2 );
      if( dz > 0){
	dd = dy - ( dz / 2 );
      }else{
	dd = ( dy / 2 ) - dz;
      }
  
      while ( x <= x1 ) {

	for(z_x=0;z_x<500;z_x++){
	  for(z_y=0;z_y<500;z_y++){
	    zees[z_x][z_y] = z_values[z_x][z_y];
	  }
	}
	z_values[x][YRES-1-y] = plot_z(s, c, x, y, z, zees);

	if ( d < 0 ) {
	  x = x + 1;
	  z = z + 1;
	  d = d + dy;
	}
	else {
	  x = x + 1;
	  y = y + 1;
	  z = z + 1;
	  d = d + dy - dx;
	}
	if( dd < 0 ){
	  dd = dd + dy;
	}else{
	  dd = dd + dy - dz;
	}
      }
    }

    //slope > 1: Octant 2 (6)
    else {
      d = ( dy / 2 ) - dx;

      if( dz > 0){
	dd = dy - ( dz / 2 );
      }else{
	dd = ( dz / 2 ) - dz;
      }
      while ( y <= y1 ) {
	for(z_x=0;z_x<500;z_x++){
	  for(z_y=0;z_y<500;z_y++){
	    zees[z_x][z_y] = z_values[z_x][z_y];
	  }
	}
	z_values[x][YRES-1-y] = plot_z(s, c, x, y, z, zees);
	if ( d > 0 ) {
	  y = y + 1;
	  d = d - dx;
	}
	else {
	  y = y + 1;
	  x = x + 1;
	  z = z + 1;
	  d = d + dy - dx;
	}
	if ( dd > 0 ){
	  dd = dd - dz;
	}else{
	  dd = dd + dy - dz;
	}
      }
    }
  }

  //negative slope: Octants 7, 8 (3 and 4)
  else { 

    //slope > -1: Octant 8 (4)
    if ( dx > abs(dy) ) {

      d = dy + ( dx / 2 );
      
      if( dz > abs(dy) ){
	dd = dy + ( dz / 2 );
      }else{
	dd =  (dy / 2) + dz;
      }
  
      while ( x <= x1 ) {
	
	for(z_x=0;z_x<500;z_x++){
	  for(z_y=0;z_y<500;z_y++){
	    zees[z_x][z_y] = z_values[z_x][z_y];
	  }
	}
	z_values[x][YRES-1-y] = plot_z(s, c, x, y, z, zees);

	if ( d > 0 ) {
	  x = x + 1;
	  z = z + 1;
	  d = d + dy;
	}
	else {
	  x = x + 1;
	  y = y - 1;
	  z = z + 1;
	  d = d + dy + dx;
	}
	if ( dd > 0 ){
	  dd = dd + dy;
	}else{
	  dd = dd + dy + dz;
	}
      }
    }

    //slope < -1: Octant 7 (3)
    else {

      d =  (dy / 2) + dx;
      
      if( dz > abs(dy) ){
	dd = dy + ( dz / 2 );
      }else{
	dd =  (dy / 2) + dz;
      }
      
      while ( y >= y1 ) {

	for(z_x=0;z_x<500;z_x++){
	  for(z_y=0;z_y<500;z_y++){
	    zees[z_x][z_y] = z_values[z_x][z_y];
	  }
	}
	z_values[x][YRES-1-y] = plot_z(s, c, x, y, z, zees);
	if ( d < 0 ) {
	  y = y - 1;
	  d = d + dx;
	}
	else {
	  y = y - 1;
	  x = x + 1;
	  z = z + 1;
	  d = d + dy + dx;
	}
	if ( dd < 0 ){
	  dd = dd + dz;
	}else{
	  dd = dd + dy + dz;
	}
      }
    }
  }
}