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; } } }
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; } } } } }
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; } } } } }