domingo, 25 de marzo de 2018

Simulación HTML5


Simulación HTML5

Utilizando o desenvolvemento matemático  imos crear unha simulación informática. Imos poder ver como é a forma das clepsidras e o seu baleirado a través da simulación. Teremos, desta maneira, unha visión moi clara de como é a clepsidra por dentro. Para o desenvolvemento da aplicación imos usar HTML5, o que nos permitirá unha fácil difusión e publicación dos resultados a través de Internet. Os tres linguaxes que integran HTML5 son HTML, CSS e JAVASCRIPT. Usaremos tamén o API Canvas de HTML5 para crear a animación do baleirado.

Imos necesitar unha estrutura de cartafoles como a que se mostra na figura. Fai click co rato para examinala ben.

Eloi. Sitio Web. CC-BY-SA
Isto permítenos separar o código que corresponde a cada linguaxe, HTML, CSS e JAVASCRIPT. HTML define a estrutura da páxina, CSS o estilo e JAVASCRIPT o programa ou script da animación. As frechas negras indican que os elementos que sinalan a outros están contidos neles. Imos desenvolver o código e organizalo nas cartafoles.

Páxina de entrada o sitio index.html

 Para crear esta páxina teclearemos o seguinte código nun editor de texto plano, en Ubuntu o mousepad ou o gedit, en Windows o block de notas. Unha vez tecleado gardarémolo co nome index.html. Este arquivo index.html é a páxina de entrada ao noso sitio. Ao facer dobre click no arquivo, co rato, ábrese o navegador e lanza a nosa páxina web.

<html>
 <head>
  <title>Animación</title>
  <meta http-equiv='Content-Type' content='text/html;
  charset=UTF-8' />
  <link rel='stylesheet' type='text/css'
  href='css/estilos.css'      
   media='screen'/>
 </head>
 <body>
  <div>
  <h1>ANIMACIÓN DE LAS CLEPSIDRAS</h1>
  <p>As clepsidras tendán unha altura de 10cm e
  un buraco para <br/>o
  vaciado de 1mm na súa parte inferior. O facer click no
  <br/> botón preguntarásenos polo tiempo de
  vaciado.<br/>
  Ao teclear un tempo o ordenador xérase a
  clepsidra cuxo<br/>
  perfil responda a ese tempo, según noso
  modelo matemático,
  <br/> e simulará o vaciado.</p>
  <a href='animacion/animacion.html'>
  <img src='imagen/boton.png' /></a>
  </div>
 </body>
</html>

Esta páxina enlaza a través da etiqueta:
 <link rel=' stylesheet' type=' text/ css' href =' css/estilos. css' media=' screen'/>
a folla de estilos estilos. css que se atopa no cartafol css gardada na mesma cartafol que contén a index.html; isto conséguese co atributo: href=' css/estilos. css'; é un exemplo do que se chama direccionamiento relativo. Para crear estilos. css escribimos nun editor de texto plano o seguinte código e gardámolo no cartafol css co nome estilos. css.

 h1 {background-color:#000060;}
div {position:absolute;top:5%;left:20%; border-color:#64009e;
 border-style:solid;border-width:10px;background-color:#00009b;}
h1 {margin:2%;border-color:#64009e; border-style:solid;padding:
5%;border-width:7px;background-color:#8f00e3;}
p {text-align:center;border-color:#64009e; border-style:solid;
margin:5%;padding:5%;border-width:5px;background-color:#8f00e3;}
a {position:relative;bottom:20px;left:40%;padding:20px;}
body {background-color:#000060;}

A animación é enlazada pola páxina index.html a través do atributo href da etiqueta:

<a href='animacion/animacion.html'><img src='imagen/boton.png' /></a>

Ao facer click no botón abrirase a páxina animacion.html que se atopa no cartafol animacion gardada na mesma cartafol que index.html; outro exemplo de direccionamiento relativo. Para escribir a páxina web animacion.html escribimos nun editor de texto plano o seguinte código e gardámolo no cartafol animacion.

<html>
<head>
<title>Animación</title>
<meta http-equiv='Content-Type' content='text/html;
 charset=UTF-8' />
<script type='text/javascript' src='javascript/codigo.js'>
</script>
<link rel='stylesheet' type='text/css'
href='css/estilos.css' screen='media'/>
</head>
<body>
<div id='primera'>
<h2>CLEPSIDRA</h2>
<p>A clepsidra ten 10 centímetros de alto e
un radio no buraco de evacuación dun  milímetro.
 O diseño da clepsidra correspondese co
  tiempo introducido.</p>
<div class='capa1'><H4>TEMPO DE DESCENSO:</H4>
<div  id='reloj2'></div>
</div>
<div class='capa2'>
<canvas id='canvas1' width='550' height='550'>
</canvas>
</div>
</div>
<div id='segunda'>
<h2>CLEPSIDRA</h2>
<p>A clepsidra tien 10 centímetros de alto e
 un radio no buraco de evacuación dun
 milímetro. O deseño da
 clepsidra  correspondese co tempo introducido.</p>
<div class='capa1'><h4>TIEMPO DE DESCENSO:</h4>
<div  id='reloj2'></div>
</div>
<div class='capa2'>
<canvas id='canvas2' width='550' height='550'>
</canvas>
</div>
</div>
</body>
</html>



Esta estrucutura en HTML enlaza cos estilos CSS a través da etiqueta:

 <link rel='stylesheet' type='text/css'  href='css/estilos.css' screen='media'/>

Onde se usa direccionamiento relativo, o procedemento é análogo aos casos anteriores. O código de estilos. css é o seguinte.

body {background-color:#8f00e3;}
#primera {z-index:15; position:absolute; top:1em; left:1em;}
#segunda {z-index:5; position:absolute; top:1em; left:1em;}
.capa1 {float:left;}
.capa2 {position:absolute; top:100px; left:300px;}

A su vez la página animacion.html enlaza el código javascript que realiza la animación, lo hace a través de la etiqueta:

<script type='text/javascript' src='javascript/codigo.js'></script>

Usamos o direccionamiento relativo. O código do arquivo codigo. js móstrase a continuación, e debe estar gardado no cartafol javascript, que está gardada na cartafol animación.

var radio,altura,constante,x1,x2,y1,
y2,rmax,contador,tiempo,bucle;
tiempo=0;
radio=0.001;
contador=0;
altura=0.10;
bucle=true;
while (bucle==true){
  tiempo=prompt("Introduce el tiempo,
  entre 30 segundos y 180 segundos:  ");
  if (tiempo<=180 && tiempo>=30)
    {bucle=false;}
  else
    {bucle=true;}}
constante=(Math.pow((altura/tiempo),2)/
(2*9.81*Math.pow(radio,4)));
rmax=Math.round(Math.pow((altura/constante)
,1/4)*1000*5)+10;
window.addEventListener("load",eventWindowLoaded
,false);
function eventWindowLoaded()  {
  opecanvas();
   }
function opecanvas() {
  var canvasli=document.getElementById('canvas1');
  var contexto=canvasli.getContext('2d');
  var canvasli2=document.getElementById('canvas2');
  var contexto2=canvasli2.getContext('2d');
  setInterval(opedibujar,(tiempo/500)*1000);
  function opedibujar(){
    contexto.clearRect(0,0,500,500);
    contexto.strokeStyle='black';
    contexto.lineWidth=5;
    contexto.fillStyle='red';
    contexto.beginPath();
    x1=0;
    x2=0.2;
    y1=0;
    y2=0;
    for(var i=0;i<=rmax;i++){
      y1=(Math.pow(x1,4)*0.000000001*constante)*5
      y2=(Math.pow(x2,4)*0.000000001*constante)*5
      if (i==0){
        contexto.moveTo(260,500);}
      if (i==rmax){
        contexto.lineTo(i+260,502);
        contexto.lineTo(260,502);}
      else
        {contexto.lineTo(i+260,500-y2);}
      x1=x2;
      x2=x2+0.2;
     }
 
    x1=0;
    x2=-0.2;
    y1=0;
    y2=0;
    for(var i=0;i<=rmax;i++){
      y1=(Math.pow(x1,4)*0.000000001*constante)*5
      y2=(Math.pow(x2,4)*0.000000001*constante)*5
      if (i==0){
        contexto.moveTo(260,500);}
      if (i==rmax){
        contexto.lineTo(-i+260,502);
        contexto.lineTo(260,502);
       }
      else{
        contexto.lineTo(-i+260,500-y2);
       }
      x1=x2;
      x2=x2-0.2;
    }
    contexto.stroke();
    contexto.fill();
    contexto.closePath();
    if (contador==0) {
      fechaHora1 = new Date();
      horas1 = fechaHora1.getHours();
      minutos1 = fechaHora1.getMinutes();
      segundos1 = fechaHora1.getSeconds();
      tiempo_1=horas1*60*60+minutos1*60
      +segundos1;
     }
    if (contador<=500 && contador>0) {
      fechaHora2 = new Date();
      horas2 = fechaHora2.getHours();
      minutos2 = fechaHora2.getMinutes();
      segundos2 = fechaHora2.getSeconds();
      tiempo_2=horas2*60*60+minutos2*60+
      segundos2;
      tiempo_3=tiempo_2-tiempo_1;
      if (tiempo_3==1){
        document.getElementById('reloj2').
        innerHTML = tiempo_3+' segundo';}
      else
        {if (contador==500)
          {document.getElementById
        ('reloj2').innerHTML = tiempo+' segundos';}
        else
          {document.getElementById('reloj2')
          .innerHTML = tiempo_3+' segundos';}
         }
     }
     if (contador<= 500){
       contexto2.strokeStyle='blue';
       contexto2.fillStyle='#8f00e3';
       contexto2.fillRect(0,0,600,600);
       contexto2.fillStyle='blue';
       contexto2.beginPath();
       contexto2.moveTo(rmax+260,contador);
       contexto2.lineTo(rmax+260,500);
       contexto2.lineTo(260-rmax,500);
       contexto2.lineTo(260-rmax,contador);
       contexto2.lineTo(rmax+260,contador);
       contexto2.stroke();
       contexto2.fill();
       contexto2.closePath();}
       contador=contador+1;}
    }
}

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.