|
Foamy Ether - A Framework for a Theory Of Everything Conceived and written by
Peter C.M. Hahn
C.E.T. |
//////////////////////////////////////////////////
// emitPhoton.thd
// This shows a 2D ether with particle in middle.
// Part of its
outer shell rotates,
// which causes
the emission of a photon.
//////////////////////////////////////////////////
// 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-7, .0001, .00001, 1, 1);
factory.material = mat ;
factory.detectCollision = false;
// use degrees
as metric for angles
factory.useDegrees = true;
var spngCnst
= .00000001; // set spring constant
var dmpCnst =
.0000001; // set damper constant
// build array
of balls
var width = 71; // 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,5*width,depth*spacing/2};
// point camera
down at middle of array
scene.lookAt =
{width*spacing/2, 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 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);
}
}
// 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});
dmpr.damperConstant
= dmpCnst;
// color every 5th damper on z
axis
if((x+1)%5 == 1){
dmpr.color
= green;
}else{
dmpr.color
= white;
}
dpz[x].append(dmpr);
}
}
// make particle
in middle of array
var imp = 0.8; // enter implode ratio
var rad
= 9; // 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)
//print("x=",
x, " z=", z, " . ", s[x][z].position, " . ",
norm(s[x][z].position-center), newline);
s[x][z].move(
(centerX-x*spacing)*(imp), 0, (centerZ-z*spacing)*(imp)
);
s[x][z].static
= true;
}
}//z
}//x
// make red line
for (var line=width/2; line<width-1; line++){
dpx[line][depth/2].color = RGB(255, 0, 0);
}
// simulate
scene, implode
simulator.stepsize =
.5;
while (simulator.time
< 250) {
simulator.run(1);
// WaitFrame();
}
// pause for ten
frames
for (var f=0; f<10; f++){
WaitFrame();
}
//rotate
opposite
var rot = -45; // enter degrees to rotate
for (x=lower+rad; x<upper; x++) {
for (var
z=lower+rad/2; z<upper-rad/2; z++) { // rotate 1/4
of particle
if( norm(s[x][z].position-center) <= rad*spacing
){ // only rotate if balls are within radius (round
off corners)
s[x][z].rotateAround({centerX
, 0, centerZ},{0,1,0},rot);
}
}//z
}//x
// simulate
scene
simulator.stepsize =
.1;
simulator.resetTime();
while (simulator.time
< 500) {
simulator.run(10);
WaitFrame();
};
|
Peter C.M. Hahn C.E.T. |
|