Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <title>James' le' derp gravity sim</title>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
- <style>
- body {
- font-family: Monospace;
- background-color: #f0f0f0;
- margin: 0px;
- overflow: hidden;
- }
- </style>
- </head>
- <body>
- <script src='../three.js/build/Three.js'></script>
- <script src="../three.js/examples/js/Stats.js"></script>
- <script>
- var camera, scene, renderer,
- geometry, material;
- var mass, interval, acceleration, distance;
- var points = mesh = objects = [];
- var velocity = [];
- var difx, dify, difz, accx, accy, accz, multiplierx, multipliery, multiplierz;
- init();
- animate();
- function movePoints(points, mass, interval){
- for(var i = 0; i < points.length; i++){
- for(var x = 0; x < points.length; x++){
- difx = points[x][0] - points[i][0];
- dify = points[x][1] - points[i][1];
- difz = points[x][2] - points[i][2];
- distance = Math.pow(difx, 2) + Math.pow(dify, 2) + Math.pow(difz, 2);
- if(distance != 0 && distance > Math.pow(150, 2)){
- acceleration = mass / distance;
- multiplierx = difx && difx / Math.abs(difx);
- multipliery = dify && dify / Math.abs(dify);
- multiplierz = difz && difz / Math.abs(difz);
- accx += 0.5*multiplierx*Math.abs(acceleration*difx/distance)*Math.pow(interval, 2);
- accy += 0.5*multipliery*Math.abs(acceleration*dify/distance)*Math.pow(interval, 2);
- accz += 0.5*multiplierz*Math.abs(acceleration*difz/distance)*Math.pow(interval, 2);
- }
- }
- alert(mesh[i].position.x);
- mesh[i].position.x = accx + velocity[i][0]*interval;
- mesh[i].position.y = accy + velocity[i][1]*interval;
- mesh[i].position.z = accz + velocity[i][2]*interval;
- alert(mesh[i].position.x);
- velocity[i][0] = (points[i][0] - mesh[i].position.x)/interval;
- velocity[i][1] = (points[i][1] - mesh[i].position.y)/interval;
- velocity[i][2] = (points[i][2] - mesh[i].position.z)/interval;
- }
- }
- function init() {
- scene = new THREE.Scene();
- camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
- camera.position.z = 1000;
- scene.add( camera );
- geometry = new THREE.SphereGeometry( 100, 10, 10 );
- //material = new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, wireframe: true } );
- for(var i = 0; i < 10; i++){
- mesh[i] = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, wireframe: true } ) );
- scene.add(mesh[i]);
- mesh[i].position.x = Math.floor(Math.random()*window.innerWidth - window.innerWidth/2);
- mesh[i].position.y = Math.floor(Math.random()*window.innerHeight - window.innerHeight/2);
- mesh[i].position.z = Math.floor(Math.random()*500 - 250);
- }
- renderer = new THREE.CanvasRenderer();
- renderer.setSize( window.innerWidth, window.innerHeight );
- document.body.appendChild( renderer.domElement );
- }
- function animate() {
- requestAnimationFrame( animate );
- render();
- }
- function render() {
- for(var x = 0; x < mesh.length; x++){
- objects[x][0] = mesh[x].position.x;
- objects[x][1] = mesh[x].position.y;
- objects[x][2] = mesh[x].position.z;
- mesh[x].rotation.x += Math.random()*0.05;
- mesh[x].rotation.y += Math.random()*0.05;
- mesh[x].rotation.z += Math.random()*0.05;
- velocity[x] = new Array(3);
- velocity[x][0] = 0;
- velocity[x][1] = 0;
- velocity[x][2] = 0;
- }
- movePoints(objects, 50000000, 1);
- renderer.render( scene, camera );
- }
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment