|
Foamy Ether - A Framework for a Theory Of Everything Conceived and written by
Peter C.M. Hahn
C.E.T. |
//////////////////////////////////////////////////
//
2DetherArrayAndParticle.thd
// This shows a 2D ether with particle in middle.
//////////////////////////////////////////////////
// set
background color
scene.backColor=RGB(70,70,70);
// 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-7, .0001, .00001, 1, 1);
factory.material = mat ;
var spngCnst
= .00000001; // set spring constant
var dmpCnst =
.0000001; // set damper constant
// build array
of balls
var width = 40; // enter number of balls for array width
var depth = width; // 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,15*width,depth*spacing/2};
// point camera
down at middle of array
scene.lookAt =
{width*spacing/2, 0, depth*spacing/2};
// build 2D
array of spheres
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});
// color every 5th ball on z &
x axis
if((x+1)%5 == 1 || (z+1)%5
== 1){
ball.color
= green;
}else{
ball.color
= white;
}
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 balls 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++) {
sprng = Spring(s[x][z],{0,0,0},s[x+1][z],{0,0,0});
sprng.springConstant
= spngCnst;
spx[x].append(sprng);
dmpr = Damper(s[x][z],{0,0,0},s[x+1][z],{0,0,0});
dmpr.damperConstant
= dmpCnst;
// color every 5th damper on x
axis
if((z+1)%5 == 1){
dmpr.color
= green;
}else{
dmpr.color
= white;
}
dpx[x].append(dmpr);
}//z
}//x
// build array
of springs and dampers attaching to balls 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++) {
var sprng
= Spring(s[x][z],{0,0,0},s[x][z+1],{0,0,0});
sprng.springConstant
= spngCnst;
spz[x].append(sprng);
var dmpr
= Damper(s[x][z],{0,0,0},s[x][z+1],{0,0,0});
// color every 5th damper on z
axis
dmpr.damperConstant
= dmpCnst;
if((x+1)%5 == 1){
dmpr.color
= green;
}else{
dmpr.color
= white;
}
dpz[x].append(dmpr);
}//z
}//x
// make particle
in middle of array
var imp = 0.8; // enter implode ratio
var rad
= 10; // enter radius of particle (by number of spacings)
var lower = ceil((width-1)/2 - rad); // calc lower limit of array index
var upper = ceil((width-1)/2 + rad+1); //
calc upper limit of array index
var center =
{spacing*(width-1)/2, 0, spacing*(depth-1)/2}; //
calc center location of array
var centerX
= spacing*(width-1)/2;
var centerZ
= spacing*(depth-1)/2;
for
(x=lower; x<upper; x++) {
for (var z=lower;
z<upper; z++) {
if( norm(s[x][z].position-center) <= rad*spacing
){ // only move if balls are within radius (round off
corners)
s[x][z].move(
(centerX-x*spacing)*(imp), 0, (centerZ-z*spacing)*(imp)
);
s[x][z].static
= true;
}
}//z
}//x
// simulate
scene
WaitFrame();
simulator.stepsize =
.1;
while (simulator.time
< 100) {
simulator.run(1);
WaitFrame();
};
|
Peter C.M. Hahn C.E.T. |
|