I took that last example to a new personal height... I made the circular path and divided in half. Effectively making an elliptical path. I put a second elliptical path just below and made four equal distance points on each ellipse forming a square on each ellipse. I then connected the top and bottom squares forming a cube. So, now it's a rotating cube.
See cube rotating at: OLEDCube - SSD1306 I2C OLED Animation - YouTube
Extra code to be added to last example:
float SpinAngle = i * 6;
SpinAngle = SpinAngle / 57.296;
float SpinAngle2 = SpinAngle + 90 / 57.296;
int a = (hSpin + (sin(SpinAngle) * (SpinRadius / 2)));
int b = (vSpin - (cos(SpinAngle) * (SpinRadius / 2)))/2;
int c = (hSpin - (sin(SpinAngle) * (SpinRadius / 2)));
int d = (vSpin + (cos(SpinAngle) * (SpinRadius / 2)))/2;
int a1 = (hSpin + (sin(SpinAngle2) * (SpinRadius / 2)));
int b1 = (vSpin - (cos(SpinAngle2) * (SpinRadius / 2)))/2;
int c1 = (hSpin - (sin(SpinAngle2) * (SpinRadius / 2)));
int d1 = (vSpin + (cos(SpinAngle2) * (SpinRadius / 2)))/2;
int e = (hSpin + (sin(SpinAngle) * (SpinRadius / 2)));
int f = (vSpin2 - (cos(SpinAngle) * (SpinRadius / 2)))/2;
int g = (hSpin - (sin(SpinAngle) * (SpinRadius / 2)));
int h = (vSpin2 + (cos(SpinAngle) * (SpinRadius / 2)))/2;
int e1 = (hSpin + (sin(SpinAngle2) * (SpinRadius / 2)));
int f1 = (vSpin2 - (cos(SpinAngle2) * (SpinRadius / 2)))/2;
int g1 = (hSpin - (sin(SpinAngle2) * (SpinRadius / 2)));
int h1 = (vSpin2 + (cos(SpinAngle2) * (SpinRadius / 2)))/2;
display.drawLine(a,b,a1,b1,WHITE);
display.drawLine(a1,b1,c,d,WHITE);
display.drawLine(c,d,c1,d1,WHITE);
display.drawLine(c1,d1,a,b,WHITE);
display.drawLine(e,f,e1,f1,WHITE);
display.drawLine(e1,f1,g,h,WHITE);
display.drawLine(g,h,g1,h1,WHITE);
display.drawLine(g1,h1,e,f,WHITE);
display.drawLine(a,b,e,f,WHITE);
display.drawLine(g,h,c,d,WHITE);
display.drawLine(a1,b1,e1,f1,WHITE);
display.drawLine(g1,h1,c1,d1,WHITE);
A second version with the ellipses turn opposite to each other causing the cube animation to have depth or perspective.
See cube with perspective rotating at: OLEDDepth - SSD1306 I2C OLED Animation - YouTube
Revised addition code:
SpinAngle = SpinAngle / 57.296;
float SpinAngle2 = SpinAngle + 90 / 57.296;
int a = (hSpin - (sin(SpinAngle) * (SpinRadius / 2)));
int b = (vSpin - (cos(SpinAngle) * (SpinRadius / 2)))/2;
int c = (hSpin + (sin(SpinAngle) * (SpinRadius / 2)));
int d = (vSpin + (cos(SpinAngle) * (SpinRadius / 2)))/2;
int a1 = (hSpin + (sin(SpinAngle2) * (SpinRadius / 2)));
int b1 = (vSpin + (cos(SpinAngle2) * (SpinRadius / 2)))/2;
int c1 = (hSpin - (sin(SpinAngle2) * (SpinRadius / 2)));
int d1 = (vSpin - (cos(SpinAngle2) * (SpinRadius / 2)))/2;
int e = (hSpin + (sin(SpinAngle) * (SpinRadius / 2)));
int f = (vSpin2 - (cos(SpinAngle) * (SpinRadius / 2)))/2;
int g = (hSpin - (sin(SpinAngle) * (SpinRadius / 2)));
int h = (vSpin2 + (cos(SpinAngle) * (SpinRadius / 2)))/2;
int e1 = (hSpin - (sin(SpinAngle2) * (SpinRadius / 2)));
int f1 = (vSpin2 + (cos(SpinAngle2) * (SpinRadius / 2)))/2;
int g1 = (hSpin + (sin(SpinAngle2) * (SpinRadius / 2)));
int h1 = (vSpin2 - (cos(SpinAngle2) * (SpinRadius / 2)))/2;
display.drawLine(a,b,a1,b1,WHITE);
display.drawLine(a1,b1,c,d,WHITE);
display.drawLine(c,d,c1,d1,WHITE);
display.drawLine(c1,d1,a,b,WHITE);
display.drawLine(e,f,e1,f1,WHITE);
display.drawLine(e1,f1,g,h,WHITE);
display.drawLine(g,h,g1,h1,WHITE);
display.drawLine(g1,h1,e,f,WHITE);
display.drawLine(a,b,g,h,WHITE);
display.drawLine(a1,b1,g1,h1,WHITE);
display.drawLine(c,d,e,f,WHITE);
display.drawLine(c1,d1,e1,f1,WHITE);