Hello,

I have been experimenting lately with some higher dimensional systems based on the platonic solids and here are some of my results. I have used the mandelbox equation for all of them, since its very simple to use. But you can also use others..

The formulas are in simple C format and in most cases, I didn't have optimized them in order to maintain clarity.

**Tetrahedron/Octahedron**I have posted this formula before, its on the Quadray post.

The main difference between the old formula and the presented one is the fact that setting the delta value to 3, generates the tetrahedron, while a value of 0 generates the octahedron (also, this is array based, the old one used variables).

Here is the formula:

bool TetraOcta(float x, float y, float z,int Iter){

bool escape=false;

float V[4];//variables

float CT[4];//C Value

float radius=0;

int ic;

const float delta=3;//make it 0 for the octahedron

//four dimensions

CT[0]=fabs((x+y+z)-delta);

CT[1]=fabs((-x-y+z)-delta);

CT[2]=fabs((-x+y-z)-delta);

CT[3]=fabs((x-y-z)-delta);

for(int it=0;it<4;it++)V[it]=0;

for (ic=0;ic<Iter;ic++){

radius=0;

for(int it=0;it<4;it++){

if(V[it]>1)V[it]=2-V[it];

else

if(V[it]<-1)V[it]=-2-V[it];

radius+=(V[it]*V[it]);

}

const float vm=sqrt(radius);

if(vm<0.5){

for(int it=0;it<4;it++)V[it]*=4;

} else

if(vm<1){

const float vsq=vm*vm;//-vm*vm for fun!!

for(int it=0;it<4;it++)V[it]/=vsq;

}

radius=0;

for(int it=0;it<4;it++){

V[it]=V[it]*2+CT[it];

radius+=(V[it]*V[it]);

}

if (radius>3600) break;

}

if(ic<Iter)escape=false;else escape=true;

return escape;

}

I have another Octahedron formula (6D) but its slower than this one..

For the Cube, well, everyone knows the Mandelbox, so I will skip it..

Now here comes the more complicated ones..I warn you..those formulas are not for the faint of heart, since they have more than the classic 3D

**Dodecahedron**This is a large formula, it has 12 Dimensions and if you plan to render it, I recommend you to use GPU..

bool Dodecahedron(float x, float y, float z,int Iter){

bool escape=false;

float V[12];//variables

float CT[12];//C Value

float radius=0;

int ic;

const float delta=7;

//12 Dimensions

CT[0]=fabs(y+z*1.6180339887498948482045868343656)-delta;

CT[1]=fabs(-y+z*1.6180339887498948482045868343656)-delta;

CT[2]=fabs(y-z*1.6180339887498948482045868343656)-delta;

CT[3]=fabs(-y-z*1.6180339887498948482045868343656)-delta;

CT[4]=fabs(x+y*1.6180339887498948482045868343656)-delta;

CT[5]=fabs(-x+y*1.6180339887498948482045868343656)-delta;

CT[6]=fabs(x-y*1.6180339887498948482045868343656)-delta;

CT[7]=fabs(-x-y*1.6180339887498948482045868343656)-delta;

CT[8]=fabs(x*1.6180339887498948482045868343656+z)-delta;

CT[9]=fabs(-x*1.6180339887498948482045868343656+z)-delta;

CT[10]=fabs(x*1.6180339887498948482045868343656-z)-delta;

CT[11]=fabs(-x*1.6180339887498948482045868343656-z)-delta;

for(int it=0;it<12;it++)V[it]=0;

for (ic=0;ic<Iter;ic++){

radius=0;

for(int it=0;it<12;it++){

if(V[it]>1)V[it]=2-V[it];

else

if(V[it]<-1)V[it]=-2-V[it];

radius+=(V[it]*V[it]);

}

const float vm=sqrt(radius);

if(vm<0.5){

for(int it=0;it<12;it++)V[it]*=4;

} else

if(vm<1.5){

const float vsq=vm*vm;//-vm*vm for fun!!

for(int it=0;it<12;it++)V[it]/=vsq;

}

radius=0;

for(int it=0;it<12;it++){

V[it]=V[it]*2+CT[it];

radius+=(V[it]*V[it]);

}

if (radius>3600) break;

}

if(ic<Iter)escape=false;else escape=true;

return escape;

}

Here is an example render of this formula (its the same that I have posted on the Quadray post)

You can also see it near the center (I have post a render on DA):

http://aexion.deviantart.com/art/Near-the-Core-207032701**Icosahedron**This formula is..well.. it's complicated.. mostly because it has 20 dimensions..

bool Icosahedron(float x, float y, float z,int Iter){

bool escape=false;

float V[20];//variables

float CT[20];//C Value

float radius=0;

int ic;

const float delta=0;

//20 dimensions

CT[0]=fabs(x+y+z)-delta;

CT[1]=fabs(x+y -z)-delta;

CT[2]=fabs(x -y +z)-delta;

CT[3]=fabs(x -y -z)-delta;

CT[4]=fabs(-x+ y +z)-delta;

CT[5]=fabs(-x +y -z)-delta;

CT[6]=fabs(-x -y +z)-delta;

CT[7]=fabs(-x -y -z)-delta;

CT[8]=fabs(y*0.61803398874989484820458683436564+ z*1.6180339887498948482045868343656)-delta;

CT[9]=fabs(y*0.61803398874989484820458683436564 -z*1.6180339887498948482045868343656)-delta;

CT[10]=fabs(-y*0.61803398874989484820458683436564 +z*1.6180339887498948482045868343656)-delta;

CT[11]=fabs(-y*0.61803398874989484820458683436564 -z*1.6180339887498948482045868343656)-delta;

CT[12]=fabs(x*0.61803398874989484820458683436564+ y*1.6180339887498948482045868343656)-delta;

CT[13]=fabs(x*0.61803398874989484820458683436564 -y*1.6180339887498948482045868343656)-delta;

CT[14]=fabs(-x*0.61803398874989484820458683436564 +y*1.6180339887498948482045868343656)-delta;

CT[15]=fabs(-x*0.61803398874989484820458683436564 -y*1.6180339887498948482045868343656)-delta;

CT[16]=fabs(x*1.6180339887498948482045868343656 + z*0.61803398874989484820458683436564)-delta;

CT[17]=fabs(x*1.6180339887498948482045868343656 -z*0.61803398874989484820458683436564)-delta;

CT[18]=fabs(-x*1.6180339887498948482045868343656 +z*0.61803398874989484820458683436564)-delta;

CT[19]=fabs(-x*1.6180339887498948482045868343656 -z*0.61803398874989484820458683436564)-delta;

for(int it=0;it<20;it++)V[it]=0;

for (ic=0;ic<Iter;ic++){

radius=0;

for(int it=0;it<20;it++){

if(V[it]>1)V[it]=2-V[it];

else

if(V[it]<-1)V[it]=-2-V[it];

radius+=(V[it]*V[it]);

}

const float vm=sqrt(radius);

if(vm<0.5){

for(int it=0;it<20;it++)V[it]*=4;

} else

if(vm<1.75){

const float vsq=vm*vm;

for(int it=0;it<20;it++)V[it]/=vsq;

}

radius=0;

for(int it=0;it<20;it++){

V[it]=V[it]*2+CT[it];

radius+=(V[it]*V[it]);

}

if (radius>3600) break;

}

if(ic<Iter)escape=false;else escape=true;

return escape;

}

And here is how it looks

I'm working with those formulas because there are some very interesting surprises on the higher dimensional spaces (did you remember the quadray mandelbrots?..

)

I also have the Sphere and a Donnut, if anyone is interested, please let me know and I will post them