diff --git a/xtrn/tw2/bang.js b/xtrn/tw2/bang.js new file mode 100644 index 0000000000000000000000000000000000000000..a4d8a3667933d6c918104dc0e403600b6553a06d --- /dev/null +++ b/xtrn/tw2/bang.js @@ -0,0 +1,96 @@ +/* + * Generates a new universe... + * + * Sectors are solar systems... and are located in three dimensions. + * then scaled to the universe + * + */ + +var sectors=1000; +var universe=[]; +var ports=[]; +var planets=[]; +var i,j; +var sol; +var warpradius=1.5; + +function SectorDistance(other) +{ + return(Math.sqrt( + Math.pow(this.X-other.X,2)+ + Math.pow(this.Y-other.Y,2)+ + Math.pow(this.Z-other.Z,2) + )); +} + +function CubicSector(x,y,z) +{ + this.X=x; // -1 to 1 + this.Y=y; // -1 to 1 + this.Z=z; // -1 to 1 + this.R=Math.sqrt( // Radius from earth (Arbitraries) + Math.pow(this.X,2)+ + Math.pow(this.Y,2)+ + Math.pow(this.Z,2) + ); + this.Az=Math.atan2(this.Y,this.X); // Azimuth from coreward (Radians) + this.Al=Math.acos(this.Z/this.R); // Altitude from galactic plane (Radians) + this.Distance=SectorDistance; +} + +function SphereSector(R, Al, Az) +{ + this.Az=Az; + this.Al=Al; + this.R=R; + this.X=this.R*Math.cos(Az)*Math.sin(Al); + this.Y=this.R*Math.sin(Al)*Math.sin(Az); + this.Z=this.R*Math.cos(Al); + this.Distance=SectorDistance; +} + +var sol=new CubicSector(0,0,0); + +for(i=0; i<sectors; i++) { + if(i==0) { + universe.push(sol); + } + else { + var x,y,z; + +check: + do { + x=Math.random()*2-1; + y=Math.random()*2-1; + z=Math.random()*2-1; + for(j in universe) { + if(parseInt(universe[j].X*10000)==parseInt(x*10000) + && parseInt(universe[j].Y*10000)==parseInt(y*10000) + && parseInt(universe[j].Z*10000)==parseInt(z*10000)) { + log("Duplicate location"); + continue check; + } + } + universe.push(new CubicSector(x,y,z)); + } while(0); + } +} + +universe.sort(function(a,b) { return(a.Distance(sol) - b.Distance(sol)) }); +var wr=Math.pow((2*2*2/sectors)/((4/3)*Math.PI),1/3)*warpradius; // warpradius 1.5 times the average sector sphere. +var totalwarps=0; +for(i in universe) { + universe[i].Warps=[]; + for(j in universe) { + if(i==j) + continue; + if(universe[i].Distance(universe[j]) <= wr) { + universe[i].Warps.push(j); + totalwarps++; + } + } + writeln(format("%f/%f/%f - %f",universe[i].X,universe[i].Y,universe[i].Z,universe[i].Distance(sol))); + writeln(" Warps: "+universe[i].Warps.join(', ')); +} +log("Radius="+wr); +log("Average warps per sector: "+(totalwarps/sectors));