/////////////
// Output
/////////////
####
### # #
### # #
#### # ##
## # ##
## # ##
# ## # #
## # ## ##
# ## ## #
# # # ##
# # # #
# ### ###
# ## #### #
# ## #### #
# ## ## ### #
# # # ## #
# ## # # #
# ### ## ## #
# #### ## #
# #### ## #
### ### #
# # # #
## # # #
# ## ## #
## ## # ##
# # ## #
# # ##
## # ###
## # ####
# # ###
# # ###
####
/////////////
// Compile
/////////////
gcc ascii_cube.c -lm
/////////////
// ascii_cube.c
/////////////
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include <time.h>
void line(double a, double b, double c, double d){
double dx,dy;
printf("\033[36m"); //Cyan color
for (double i = 1; i < 18; i++){
dx = (c-a)*(i/18.0);
dy = (d-b)*(i/18.0);
printf("\033[%d;%dH", (int)(b+dy), (int)(a+dx));
printf("#");
}
}
void rotate(double* a, double* b, double theta){
double s = sin(theta);
double c = cos(theta);
double aa = *a;
double bb = *b;
*a = aa*c + bb*s;
*b = c*bb - s*aa;
}
int main() {
srand(time(0));
double x[8];
double y[8];
double z[8];
double sz = 10.0;
double p = 22;
double q = 22;
int loop = 0;
x[0]=-sz; y[0]=-sz; z[0]=-sz;
x[1]=sz; y[1]=-sz; z[1]=-sz;
x[2]=-sz; y[2]=sz; z[2]=-sz;
x[3]=sz; y[3]=sz; z[3]=-sz;
x[4]=-sz; y[4]=-sz; z[4]=sz;
x[5]=sz; y[5]=-sz; z[5]=sz;
x[6]=-sz; y[6]=sz; z[6]=sz;
x[7]=sz; y[7]=sz; z[7]=sz;
double rotX = (rand() / (double) RAND_MAX - .5) / 1000;
double rotY = (rand() / (double) RAND_MAX - .5) / 1000;
while(1==1){
loop=loop+1;
line(x[0]+p, y[0]+q, x[1]+p, y[1]+q);
line(x[0]+p, y[0]+q, x[2]+p, y[2]+q);
line(x[0]+p, y[0]+q, x[4]+p, y[4]+q);
line(x[3]+p, y[3]+q, x[1]+p, y[1]+q);
line(x[3]+p, y[3]+q, x[2]+p, y[2]+q);
line(x[3]+p, y[3]+q, x[7]+p, y[7]+q);
line(x[6]+p, y[6]+q, x[2]+p, y[2]+q);
line(x[6]+p, y[6]+q, x[4]+p, y[4]+q);
line(x[6]+p, y[6]+q, x[7]+p, y[7]+q);
line(x[5]+p, y[5]+q, x[7]+p, y[7]+q);
line(x[5]+p, y[5]+q, x[4]+p, y[4]+q);
line(x[5]+p, y[5]+q, x[1]+p, y[1]+q);
for (int i = 0; i < 8; i++){
rotate(&x[i], &z[i], rotX);
rotate(&y[i], &z[i], rotY);
}
//Clear screen every 15 loops
if (loop%15 == 0){
printf("\033[H\033[J");
}
}
}