Make Physics Easy
Tags: gftwhackathon
Published: 2020-05-08 19:25:09

[Instructions]: # (To submit to the Grant For The Web x DEV Hackathon, please fill out all sections.)


## What I built
I built a web page with many text fields, to solve problems of physics.
For instance problems of the topic: Uniformly Accelerated Motion.
The user only specifies the value of 3 of the variables: InitialSpeed, FinalSpeed, Acceleration, Time, or Distance. ANY 3 VARIABLES of this set of 5 variables.
Then the user hit the button calculate. And the other 2 textfields empty, will be populated with the right value.
Now if the user want to see how these values were computed. The user should use a browser that supports Web Monetization.
The objective is to have a big web site that solves any problem of physics, the user only has to specify the known values and press or hit the button. It will be great to win this hackathon to get motivation to program more fields to solve more problems of physics.

### Submission Category: 

[Note]: # (Foundational Technology, Creative Catalyst, or Exciting Experiments)
 Exciting Experiments

## Demo
 http://tutarea.260mb.com/?i=2

## Link to Code
http://tutarea.260mb.com/?i=2
http://tutarea.260mb.com/mua.js

[Note]: # (Our markdown editor supports pretty embeds. If you're sharing a GitHub repo, try this syntax: `{% github link_to_your_repo %}`)


## How I built it 

[Note]: # (For example, what's the stack? did you run into issues or discover something new along the way? etc!)
I used a Notepad to text the html tags for the web page, and the .js file.

Here is the javascript code THAT INCLUDES MONETIZATION:
var Vo,Vf,A,D,T;
//Las sigs. vars auxiliares indican si ya se obtuvo o no la variable 
//Si valen 0 indican que no se ha obtenido o que son incógnitas
var conocidaVo,conocidaVf,conocidaA,conocidaD,conocidaT;

function captura(){

      //Al inicio se supone que no se conocen las variables: Vo,Vf,A,D,T;
      conocidaVo=0;   Vo="?";
      conocidaVf=0;   Vf="?";
      conocidaA =0;   A ="?";
      conocidaD =0;   D ="?";
      conocidaT =0;   T ="?";
      //Si la variable Vo no es incógnita
      if(document.Datos.Vo.value!=""){
                Vo= document.Datos.Vo.value;
        conocidaVo=1;
      }
      if(document.Datos.Vf.value!=""){
                Vf= document.Datos.Vf.value;
        conocidaVf=1;
      }
      if(document.Datos.A.value!=""){
                 A= document.Datos.A.value;
         conocidaA=1;
      }
      if(document.Datos.D.value!=""){
                 D= document.Datos.D.value;
         conocidaD=1;
      }
      if(document.Datos.T.value!=""){
                 T= document.Datos.T.value;
         conocidaT=1;
      }
}

function resuelve(){
captura();
doc=open('','Resultados',"width=350,height=400,resizable,scrollbars");
doc.document.write('<html><head> <meta name="monetization" content="$ilp.uphold.com/3L3ZYG97kmMk"><title>Resultados</title></head><body>');
doc.document.write('<b>PROBLEMA</b>: Vo='+Vo);
doc.document.write(' Vf='+Vf);
doc.document.write(' a='+A);
doc.document.write(' d='+D);
doc.document.write(' t='+T+'<br>');
doc.document.write('<b>SOLUCIÓN:</b><br>');
  //Mientras Vo sea incógnita o mientras Vf sea incógnita o ...
  //mientras T sea incógnita hacer:
if (document.monetization) {

  while( (conocidaVo==0) || 
         (conocidaVf==0) || 
         (conocidaA ==0) || 
         (conocidaD ==0) || 
         (conocidaT ==0) ){
     //Calcular Vo//////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==0)&&(conocidaVf==1)&&(conocidaD==1)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 4 obtenemos: Vo=2d/t - Vf<br>');
         Vo=2*D/T - Vf;
         doc.document.write('Sustituyendo: Vo=2('+D+'/'+T+') - '+Vf+'='+Vo+'<br>');
         conocidaVo=1;
     }
     if( (conocidaVo==0)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 1 obtenemos: Vo=Vf - at<br>');
         Vo=Vf-A*T;
         doc.document.write('Sustituyendo: Vo='+Vf+' - '+A+'('+T+')='+Vo+'<br>');
         conocidaVo=1;
     }
     if( (conocidaVo==0)&&(conocidaA==1)&&(conocidaD==1)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 2 obtenemos: Vo=(d - at<sup>2</sup>/2)(1/t)=d/t - at/2<br>');
         Vo=D/T - A*T/2;
         doc.document.write('Sustituyendo: Vo='+D+'/'+T+' - '+A+'('+T+'/2)='+Vo+'<br>');
         conocidaVo=1;
     }
     if( (conocidaVo==0)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaD==1) ){
         Vo=Vf*Vf - 2*A*D;
         Vo=Math.sqrt(Vo);
         if(Vo>=0)
         {
            doc.document.write('De la Ec. 3 obtenemos: Vo=(Vf<sup>2</sup> - 2ad)<sup>1/2</sup><br>');
            doc.document.write('Sustituyendo: Vo=['+Vf+'<sup>2</sup> - 2('+A+')'+D+']<sup>1/2</sup>='+Vo+'<br>');
            conocidaVo=1;
         }
     }
     //Calcular Vf//////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==1)&&(conocidaVf==0)&&(conocidaA==1)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 1 obtenemos: Vf=Vo + at<br>');
         Vf=Vo + A*T;
         doc.document.write('Sustituyendo: Vf='+Vo+' + ('+A+')'+T+'='+Vf+'<br>');
         conocidaVf=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==0)&&(conocidaA==1)&&(conocidaD==1) ){
         Vf=Vo*Vo + 2*A*D;
         Vf=Math.sqrt(Vf);
         doc.document.write('De la Ec. 3 obtenemos: Vf=[Vo<sup>2</sup> + 2ad]<sup>1/2</sup><br>');
         doc.document.write('Sustituyendo: Vf=['+Vo+'<sup>2</sup> + 2('+A+')'+D+']<sup>1/2</sup>='+Vf+'<br>');
         conocidaVf=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==0)&&(conocidaD==1)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 4 obtenemos: Vf=2d/t - Vo<br>');
         Vf=2*D/T - Vo;
         doc.document.write('Sustituyendo: Vf=2('+D+')/'+T+' - '+Vo+'='+Vf+'<br>');
         conocidaVf=1;
     }
     //Calcular A //////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==0)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 1 obtenemos: a=(Vf - Vo)/t<br>');
         A=(Vf - Vo)/T;
         doc.document.write('Sustituyendo: a=('+Vf+' - '+Vo+')/'+T+'='+A+'<br>');
         conocidaA=1;
     }
     if( (conocidaVo==1)&&(conocidaA==0)&&(conocidaD==1)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 2 obtenemos: a=[d - Vo t][2/t<sup>2</sup>]<br>');
         A=2*(D - Vo*t)/(T*T);
         doc.document.write('Sustituyendo: a=['+D+' - ('+Vo+')'+T+'][2/'+T+'<sup>2</sup>]='+A+'<br>');
         conocidaA=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==0)&&(conocidaD==1) ){
         doc.document.write('De la Ec. 3 obtenemos: a=[Vf<sup>2</sup> - Vo<sup>2</sup>]/[2d]<br>');
         A=(Vf*Vf - Vo*Vo)/(2*D);
         doc.document.write('Sustituyendo: a=['+Vf+'<sup>2</sup> - '+Vo+'<sup>2</sup>]/[2('+D+')]='+A+'<br>');
         conocidaA=1;
     }
     //Calcular D //////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==1)&&(conocidaA==1)&&(conocidaD==0)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 2 obtenemos: d=Vot + at<sup>2</sup>/2<br>');
         D=Vo*T + A*T*T*(0.5);
         doc.document.write('Sustituyendo: d='+Vo+'('+T+') + ('+A+')'+T+'<sup>2</sup>/2='+D+'<br>');
         conocidaD=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaD==0) ){
         doc.document.write('De la Ec. 3 obtenemos: d=[Vf<sup>2</sup> - Vo<sup>2</sup>]/[2a]<br>');
         D=(Vf*Vf - Vo*Vo)/(2*A);
         doc.document.write('Sustituyendo: d=['+Vf+'<sup>2</sup> - '+Vo+'<sup>2</sup>]/[2('+A+')]='+D+'<br>');
         conocidaD=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaD==0)&&(conocidaT==1) ){
         doc.document.write('De la Ec. 4 obtenemos: d=(t/2)[Vf + Vo]<br>');
         D=(T/2)*(Vf + Vo);
         doc.document.write('Sustituyendo: d=('+T+'/2)['+Vf+' + '+Vo+']='+D+'<br>');
         conocidaD=1;
     }
     //Calcular T //////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaT==0) ){
         doc.document.write('De la Ec. 1 obtenemos: t=(Vf - Vo)/a<br>');
         T=(Vf - Vo)/A;
         doc.document.write('Sustituyendo: t=('+Vf+' - '+Vo+')/'+A+'='+T+'<br>');
         conocidaT=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaD==1)&&(conocidaT==0) ){
         doc.document.write('De la Ec. 4 obtenemos: t=(2d)/[Vf + Vo]<br>');
         T=(2*D)/(Vf + Vo);
         doc.document.write('Sustituyendo: t=2('+D+')/['+Vf+' + '+Vo+']='+T+'<br>');
         conocidaT=1;
     }
  }//del while
}//if (document.monetization) {
else {
  while( (conocidaVo==0) || 
         (conocidaVf==0) || 
         (conocidaA ==0) || 
         (conocidaD ==0) || 
         (conocidaT ==0) ){
     //Calcular Vo//////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==0)&&(conocidaVf==1)&&(conocidaD==1)&&(conocidaT==1) ){
         Vo=2*D/T - Vf;
         conocidaVo=1;
     }
     if( (conocidaVo==0)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaT==1) ){
         Vo=Vf-A*T;
         conocidaVo=1;
     }
     if( (conocidaVo==0)&&(conocidaA==1)&&(conocidaD==1)&&(conocidaT==1) ){
         Vo=D/T - A*T/2;
         conocidaVo=1;
     }
     if( (conocidaVo==0)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaD==1) ){
         Vo=Vf*Vf - 2*A*D;
         Vo=Math.sqrt(Vo);
         if(Vo>=0)
         {
            conocidaVo=1;
         }
     }
     //Calcular Vf//////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==1)&&(conocidaVf==0)&&(conocidaA==1)&&(conocidaT==1) ){
         Vf=Vo + A*T;
         conocidaVf=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==0)&&(conocidaA==1)&&(conocidaD==1) ){
         Vf=Vo*Vo + 2*A*D;
         Vf=Math.sqrt(Vf);
         conocidaVf=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==0)&&(conocidaD==1)&&(conocidaT==1) ){
         Vf=2*D/T - Vo;
         conocidaVf=1;
     }
     //Calcular A //////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==0)&&(conocidaT==1) ){
         A=(Vf - Vo)/T;
         conocidaA=1;
     }
     if( (conocidaVo==1)&&(conocidaA==0)&&(conocidaD==1)&&(conocidaT==1) ){
         A=2*(D - Vo*t)/(T*T);
         conocidaA=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==0)&&(conocidaD==1) ){
         A=(Vf*Vf - Vo*Vo)/(2*D);
         conocidaA=1;
     }
     //Calcular D //////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==1)&&(conocidaA==1)&&(conocidaD==0)&&(conocidaT==1) ){
         D=Vo*T + A*T*T*(0.5);
         conocidaD=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaD==0) ){
         D=(Vf*Vf - Vo*Vo)/(2*A);
         conocidaD=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaD==0)&&(conocidaT==1) ){
         D=(T/2)*(Vf + Vo);
         conocidaD=1;
     }
     //Calcular T //////////////////////////////////////////////////////////////////////////
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaT==0) ){
         T=(Vf - Vo)/A;
         conocidaT=1;
     }
     if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaD==1)&&(conocidaT==0) ){
         T=(2*D)/(Vf + Vo);
         conocidaT=1;
     }
  }//del while
  doc.document.write('T='+T+'<br>');
  doc.document.write('D='+D+'<br>');
  doc.document.write('A='+A+'<br>');
  doc.document.write('Vf='+Vf+'<br>');
  doc.document.write('Vo='+Vo+'<br>');
  doc.document.write('IF YOU WANT TO SEE HOW IT WAS CALCULATED... PLEASE USE A BROWSER THAT SUPPORTS WEB MONETIZATION.');

}//else from if document.monetization
doc.document.write('</body></html>');
doc.document.close();
}

## Additional Resources/Info 


[Reminder]: # (We hope you consider expanding your submission into a full-on application for the Grant for the Web CFP, due on June 12.)