Foamy Ether - A Framework for a
Theory Of Everything

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

 

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

// photonTravelling.thd

// This shows 2D ether with sine wave traveling

// from left to right.

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

 

// set background color

scene.backColor=RGB(92,92,98);

 

// turn gravity off

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

 

// remove shadows for faster rendering

scene.shadow = false;

 

// use degrees as metric for angles

factory.useDegrees = true;

 

// turn collision detection off so things don't blow up

factory.detectCollision = false;

 

// set colors

var green = RGB(108, 255, 108);

var white = RGB(200, 200, 200);

 

// choose some default material

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

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

factory.material = mat ;

 

// set spring and damper constants

var spngCnst = .00000001;

var dmpCnst = .00000005;

 

// build array of balls

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

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

var spacing = 20; // enter spacing between balls

var ball = "";

 

// position camera in middle of array

// consider camera to be hovering over array looking down on x z plane

scene.camera = {width*spacing/2-40,580,depth*spacing/2};

// point camera down at middle of array

scene.lookAt = {width*spacing/2-40, 0, depth*spacing/2};

 

 

var s = array();

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

   s.append(array());

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

         var ball = Sphere(2, {x*spacing,0,z*spacing});

         ball.visible = false;

         s[x].append(ball);

         // set all outer edge balls as stationary

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

            ball.static = true;

         }

      }

}

 

// build array of springs and dampers attaching to spheres on x axis

var spx = array();

var dpx = array();

var dmpr = "";

var sprng = "";

for (x=0; x < width-1; x++) {

   spx.append(array());

   dpx.append(array());

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

         // make spring and attach to adjacent spheres

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

         sprng.springConstant = spngCnst;

         spx[x].append(sprng);

         // make damper and attach to adjacent spheres

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

         dmpr.damperConstant = dmpCnst;

         // color every 5th damper green on x axis

         if(z%5 == 1){

            dmpr.color = green;

         }else{

            dmpr.color = white;

         }

         dpx[x].append(dmpr);

      }

}

 

// build array of springs and dampers attaching to spheres on z axis

var spz = array();

var dpz = array();

for (x=0; x < width; x++) {

   spz.append(array());

   dpz.append(array());

      for (var z=0; z < depth-1; z++) {

         // make spring and attach to adjacent spheres

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

         sprng.springConstant = spngCnst;

         spz[x].append(sprng);

         // make damper and attach to adjacent spheres

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

         dmpr.damperConstant = dmpCnst;

         // color every 5th damper green on z axis

         if(x%5 == 1){

            dmpr.color = green;

         }else{

            dmpr.color = white;

         }

         dpz[x].append(dmpr);

      }

}

 

// sine wave sweep from left to right

var delta = 35; //.2 or .1 enter wavelength in degress

var amp = 4; //4 or 6 enter amplitude

 

for (var wave=0; wave < width-22; wave++){

   for (x=wave; x < wave+21; x++){

      for (var z=8; z < 23; z++){

         var trim = 1-(abs(15-z)*.14);

         s[x][z].position = {x*spacing,0,z*spacing+trim*amp*spacing*sin((x-wave+.2)*delta)};

      }

   }

   WaitFrame();

   // restore position

   for (var z=8; z < 23; z++){

      s[wave][z].position = {wave*spacing,0,z*spacing};

   }

};

   

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