Foamy Ether - A Framework for a
Theory Of Everything

Conceived and written by Peter C.M. Hahn C.E.T.
 
Copyright © 2005-2007

 

//////////////////////////////////////////////////

// 3DetherFunnelFlowingDownEarth.thd

// This demonstrates ether inflow.

//////////////////////////////////////////////////

 

// set background color

scene.backColor=RGB(80,80,80);

 

// turn gravity off

scene.gravity={0,0,0};

 

// set camera

scene.camera = {-220,120,-250};

scene.lookAt = {20,20,0};

 

// choose some default material

//Material (density, springConstant, dampingConstant, staticFriction, dynamicFriction, thresholdVelocity);

var mat = Material(1e-7, .0001, .00001, 1, 1);

factory.material = mat ;

 

// use degrees as metric for angles

factory.useDegrees = true;

 

// build earth

var t = Texture("earth.jpg");

var earth = Sphere(100);

 

earth.useTexture(t);

earth.rotate(90,10,-120);

earth.move(0,-90,0);

earth.sharpness = 40;

 

var spngCnst = .00000001; // set spring constant

var dmpCnst = .0000005; // set damper constant

 

// build array of balls

var width = 1; // enter number of balls for array width

var depth = 1; // enter number of balls for array depth

var height = 13; // enter number of balls for array height

var spacing = 15; // enter spacing between balls

var taper = 3.0; // enter amount of taper on array (use .0)

var funnel = -taper/spacing; // calculate funnel ratio

var x = -width;

var z = -depth;

//set RGB and alpha values for damper

var red = 1;

var green = 1;

var blue = 1;

var alpha = 0;

 

// build 3D array of balls

var s = array();

for (var y=0; y < height; y++) {

   s.append(array());

   for (var xi=0; xi <= 2*width; xi++) {

      s[y].append(array());

      for (var zi=0; zi <= 2*depth; zi++){

         // add ball to array

         var ball = Sphere(1, {x*(spacing+y*taper),y*spacing,z*(spacing+y*taper)});

         if (xi==0 || xi==width*2 || zi==0 || zi==depth*2 || y==0 || y==height){

            ball.color = RGB(255,50,50);

         }

         else {

            ball.visible = false;

         }

        s[y][xi].append(ball);

         // set all outer edge balls as stationary

         if (x==abs(width)||y==0||y==height-1||z==abs(depth)){

            ball.static = true;

         }

         z++;

      }//zi

      z = -depth;

      x++;

   }//xi

   x = -width;

}//y

 

// build 3D array of springs and dampers attaching to balls on x axis

var spx = array();

var dpx = array();

for (y=0; y < height; y++) {

   for (var x=0; x < 2*width; x++){

      spx.append(array());

      dpx.append(array());

      for (var z=0; z <= 2*depth; z++) {

         var sprng = Spring(s[y][x][z],{0,0,0},s[y][x+1][z],{0,0,0});

         sprng.color = RGB(10,10,10,0);        

         sprng.springConstant = spngCnst;

         spx[y].append(sprng);

         var dmpr = Damper(s[y][x][z],{0,0,0},s[y][x+1][z],{0,0,0});

         dmpr.damperConstant = dmpCnst;

         // make back z wall yellow

         if (z==0){

            dmpr.color = RGB(255,255,255);

         }

         if (z==depth*2){

            dmpr.color = RGB(200,200,100);

         }

         if (z>0 && z<depth*2) {

            dmpr.visible = false;

            sprng.visible = false;

         }

         dpx[y].append(dmpr);

      }

   }

}

 

// build 3D array of springs and dampers attaching to balls on z axis

var spz = array();

var dpz = array();

for (y=0; y < height; y++) {

   for (var x=0; x <= 2*width; x++){

      spz.append(array());

      dpz.append(array());

      for (var z=0; z < 2*depth; z++) {

         var sprng = Spring(s[y][x][z],{0,0,0},s[y][x][z+1],{0,0,0});

         sprng.springConstant = spngCnst;

         sprng.color = RGB(0,10,0,0);

         spz[y].append(sprng);

         var dmpr = Damper(s[y][x][z],{0,0,0},s[y][x][z+1],{0,0,0});

         dmpr.damperConstant = dmpCnst;

         // make back x wall purple

         if (x==0){

            dmpr.color = RGB(255,255,255);

         }

         if (x==width*2){

            dmpr.color = RGB(180,100,180);

         }

         if (x>0 && x<width*2) {

            dmpr.visible = false;

            sprng.visible = false;

         }

         dpz[y].append(dmpr);

      }

   }

}

 

// build 3D array of springs and dampers attaching to balls on y axis

var spy = array();

var dpy = array();

for (y=0; y < height-1; y++) {

   for (var x=0; x <= 2*width; x++){

      spy.append(array());

      dpy.append(array());

      for (var z=0; z <= 2*depth; z++) {

         var sprng = Spring(s[y][x][z],{0,0,0},s[y+1][x][z],{0,0,0});

         sprng.springConstant = spngCnst;

         sprng.color = RGB(0,10,0,0);

         spy[y].append(sprng);

         var dmpr = Damper(s[y][x][z],{0,0,0},s[y+1][x][z],{0,0,0});

         dmpr.damperConstant = dmpCnst;

         // make back z wall yellow and back x wall purple

         if (z==0){

            dmpr.color = RGB(255,255,255);

         }

         if (z==depth*2){

            dmpr.color = RGB(200,200,100);

         }

         if (x==width*2){

            dmpr.color = RGB(180,100,180);

         }

         if ((z>0 && z<depth*2)&& x!=0 && x!=width*2) {

            dmpr.visible = false;

            sprng.visible = false;

         }

         dpy[y].append(dmpr);

      }

   }

}

 

// simulate scene

var xmove = -width;

var zmove = -depth;

//move all balls down 'spacing' number times

for (var i=0; i<spacing; i++){

   for (var y=0; y < height; y++) {

      //print("y=",y, newline);

      for (var xi=0; xi <= 2*width; xi++) {

         for (var zi=0; zi <= 2*depth; zi++) {

        s[y][xi][zi].move(funnel*xmove, -1, funnel*zmove);

         zmove++;

         }//z

         zmove = -depth;

         xmove++;

      }//x

      xmove = -width;

   }//y

   WaitFrame();

};

   

Peter C.M. Hahn C.E.T.