terça-feira, 20 de dezembro de 2016

Orbitas aproximadas e escalas dos planetas (javaScript)









<html>

<head>
<style>
.div_teste
{
    padding: 20px 20px 20px 20px;
    width:300px;
    height:130px;
    position:absolute;
    z-index:100;
        background-color: rgba(255,255,255,0.7);
}
</style>
</head>

<body>

<div id="div_controls" class="div_teste">
<table>
<tr><td>Ativar movimento </td><td><input id="paused" type="checkbox" onchange="clicou();"></td></tr>

<tr><td>Velocidade do Tempo </td><td><input id="tempo_text" value="1"></input> </td></tr>

<tr><td>Escala dos planetas </td><td><input id="escala_planetas" value="30"> </input> <br></td></tr>

<tr><td>Escala das distâncias </td><td><input id="escala_distancias" value="0.0625"> </input> <br></td></tr>
</table>
</div>


<script>

//========================================================================================
// Autor: Luiz Augusto S. Prado - 2015
// Site: www.codigorapido.com.br
// javaScript: Movimento, Canvas
//========================================================================================
window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       ||
          window.webkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame    ||
          function( callback ){
            window.setTimeout(callback, 1000/100);
          };
})();





var manterLimites = function(angulo)
{
        while(angulo>=360)
        {
            angulo=angulo-360;
        }
        while(angulo<0)
        {
            angulo=angulo+360
        }
        return angulo;
}


    getSenCos = function(angulo)
    {   
        seno =    Math.sin(angulo * Math.PI / 180);
        cose =    Math.cos(angulo * Math.PI / 180);
        return [cose, seno];
    }

    var window_width = 2* window.innerWidth;
    var window_height = 1* window.innerHeight;


    var sol = {
        name:"Sol",
        color:"#FFDDAA",
        type:"spot",
        raio:0.6957,
        rotation:0,
        pos:{x:0, y:0, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
    }
    sol.startVision()




    var mercurio = {
        name:"Mercurio",
        color:"#996633",
        type:"esfere",
        raio:0.00244,
        rotation:4.1666,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:57, y:57, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
    }

    var venus = {
        name:"Vênus",
        color:"#FF9933",
        type:"esfere",
        raio:0.00602,
        rotation:1.625492931,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:107, y:107, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
    }   


    var terra = {
        name:"Terra",
        color:"#336699",
        type:"esfere",
        raio:0.006371,
        rotation:1,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:150, y:150, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
    }
    terra.startVision()

    var marte = {
        name:"Marte",
        color:"#FF6633",
        type:"esfere",
        raio:0.00339,
        rotation:1/1.8808,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:220, y:220, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
    }

    var jupiter = {
        name:"Júpiter",
        color:"#FF66FF",
        type:"esfere",
        raio:0.069911 ,
        rotation:1/11.85920,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:742.56435, y:742.56435, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
    }


    var saturno = {
        name:"Saturno",
        color:"#44FF99",
        type:"esfere",
        raio: 0.058232,
        rotation: 0.033947673,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:1437.3025, y:1437.3025, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
       
    }


    var urano = {
        name:"Urano",
        color:"#44FF99",
        type:"esfere",
        raio: 0.025362,
        rotation: 0.011904761,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:2756.327795, y:2756.327795, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
       
    }





    var netuno = {
        name:"Netuno",
        color:"#6699FF",
        type:"esfere",
        raio: 0.024622,
        rotation: 0.006068,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:4464.910635, y:4464.910635, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
       
    }



    var plutao = {
        name:"Plutão",
        color:"#AAAAAA",
        type:"esfere",
        raio: 0.001187,
        rotation: 0.006068,
        rotation_longitude:0,       
        rotation_latitude:0,
        pos:{x:6000, y:6000, z:0},
        startVision:function()
        {
            var canvas1 = document.createElement('canvas');
            canvas1.id = "canvas_"+this.name;
            canvas1.width = window_width ;
            canvas1.height = window_height ;
            document.body.appendChild( canvas1 );
        }
       
    }


    var observers = new Array(sol);
    var objects = new Array( sol, mercurio, venus, terra, marte, jupiter, saturno, urano, netuno, plutao);

    var lights = ["CCCC", "DDDD"];


var tempo = 0;


    sol = new Image()
    sol.src = "sol.png"


 var k=0;

var clicou = function()
{
    if(k!=0) k=0;
    else
        k = parseFloat( document.getElementById("tempo_text").value );
   
}

next_sene = function()


    d = document.getElementById("div_controls");
    d.style.left = 10+window.pageXOffset+'px';
    d.style.top =  10+window.pageYOffset+'px';

    tempo+=k;

    for(var i=0; i<observers.length; i++)
    {
        //document.getElementById("sss").value = observers[i].name;
        var canvas = document.getElementById("canvas_"+observers[i].name);
        var ctx = canvas.getContext("2d");

        ctx.fillStyle = "#000000";
        ctx.fillRect(0, 0, window_width, window_height);

        for(var j=0; j<objects.length; j++)
        {
            // camera não precisa ver a si mesma
            if( observers[i] != objects[j].name || true )
            {
                var ang1= tempo*objects[j].rotation;
                ang1 = manterLimites ( ang1  );
                var arrayAngs1 = getSenCos(ang1  )

                var ang2= tempo*observers[i].rotation;
                ang2 = manterLimites ( ang2  );
                var arrayAngs2 = getSenCos(ang2  )


                escala_distancias = parseFloat( document.getElementById("escala_distancias").value );
                escala_planetas = parseFloat( document.getElementById("escala_planetas").value  );
                ampliar_x_vezes = escala_planetas*escala_distancias

                x = window_width/2 + (arrayAngs1[0]*objects[j].pos.x - arrayAngs2[0]*observers[i].pos.x) *escala_distancias
                y = window_height/2 + (arrayAngs1[1]*objects[j].pos.y  - arrayAngs2[1]*observers[i].pos.y ) *escala_distancias



                if(objects[j].type=="spot")
                {
                        ctx.beginPath();
                        ctx.drawImage(sol,x-objects[j].raio*10*ampliar_x_vezes+1, y-objects[j].raio*10*ampliar_x_vezes+1, objects[j].raio*20*ampliar_x_vezes, objects[j].raio*20*ampliar_x_vezes );
                    ctx.fillStyle = "#FF3030" ;
                    ctx.font="10px Verdana"
                    ctx.fillText(objects[j].name,x-5,y+5);
                        ctx.closePath();
                        ctx.fill();
                }
                else
                {
                    ctx.fillStyle = objects[j].color ;
                        ctx.beginPath();
                    ctx.font="10px Verdana";
                    ctx.fillText(objects[j].name,x-20,y-20);
                        ctx.arc( x, y, objects[j].raio*ampliar_x_vezes+1, 0, Math.PI * 2, true );
                        ctx.closePath();
                        ctx.fill();
                }


            }
        }

    }
}



function start ()
{
  requestAnimFrame(start );
  next_sene ()
};


start (observers, lights, objects)

</script>

</body>
</html>


Nenhum comentário:

Postar um comentário