DEV Community

Gerardo Cárdenas
Gerardo Cárdenas

Posted on • Updated on

Make Physics Easy

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:

Exciting Experiments

Demo

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

Link to Code

http://tutarea.260mb.com/?i=2
http://tutarea.260mb.com/mua.js

How I built it

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;
  }
Enter fullscreen mode Exit fullscreen mode

}

function resuelve(){
captura();
doc=open('','Resultados',"width=350,height=400,resizable,scrollbars");
doc.document.write('

Resultados');
doc.document.write('PROBLEMA: Vo='+Vo);
doc.document.write(' Vf='+Vf);
doc.document.write(' a='+A);
doc.document.write(' d='+D);
doc.document.write(' t='+T+'
');
doc.document.write('SOLUCIÓN:
');
//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
');
Vo=2*D/T - Vf;
doc.document.write('Sustituyendo: Vo=2('+D+'/'+T+') - '+Vf+'='+Vo+'
');
conocidaVo=1;
}
if( (conocidaVo==0)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaT==1) ){
doc.document.write('De la Ec. 1 obtenemos: Vo=Vf - at
');
Vo=Vf-A*T;
doc.document.write('Sustituyendo: Vo='+Vf+' - '+A+'('+T+')='+Vo+'
');
conocidaVo=1;
}
if( (conocidaVo==0)&&(conocidaA==1)&&(conocidaD==1)&&(conocidaT==1) ){
doc.document.write('De la Ec. 2 obtenemos: Vo=(d - at2/2)(1/t)=d/t - at/2
');
Vo=D/T - A*T/2;
doc.document.write('Sustituyendo: Vo='+D+'/'+T+' - '+A+'('+T+'/2)='+Vo+'
');
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=(Vf2 - 2ad)1/2
');
doc.document.write('Sustituyendo: Vo=['+Vf+'2 - 2('+A+')'+D+']1/2='+Vo+'
');
conocidaVo=1;
}
}
//Calcular Vf//////////////////////////////////////////////////////////////////////////
if( (conocidaVo==1)&&(conocidaVf==0)&&(conocidaA==1)&&(conocidaT==1) ){
doc.document.write('De la Ec. 1 obtenemos: Vf=Vo + at
');
Vf=Vo + A*T;
doc.document.write('Sustituyendo: Vf='+Vo+' + ('+A+')'+T+'='+Vf+'
');
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=[Vo2 + 2ad]1/2
');
doc.document.write('Sustituyendo: Vf=['+Vo+'2 + 2('+A+')'+D+']1/2='+Vf+'
');
conocidaVf=1;
}
if( (conocidaVo==1)&&(conocidaVf==0)&&(conocidaD==1)&&(conocidaT==1) ){
doc.document.write('De la Ec. 4 obtenemos: Vf=2d/t - Vo
');
Vf=2*D/T - Vo;
doc.document.write('Sustituyendo: Vf=2('+D+')/'+T+' - '+Vo+'='+Vf+'
');
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
');
A=(Vf - Vo)/T;
doc.document.write('Sustituyendo: a=('+Vf+' - '+Vo+')/'+T+'='+A+'
');
conocidaA=1;
}
if( (conocidaVo==1)&&(conocidaA==0)&&(conocidaD==1)&&(conocidaT==1) ){
doc.document.write('De la Ec. 2 obtenemos: a=[d - Vo t][2/t2]
');
A=2*(D - Vo*t)/(T*T);
doc.document.write('Sustituyendo: a=['+D+' - ('+Vo+')'+T+'][2/'+T+'2]='+A+'
');
conocidaA=1;
}
if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==0)&&(conocidaD==1) ){
doc.document.write('De la Ec. 3 obtenemos: a=[Vf2 - Vo2]/[2d]
');
A=(Vf*Vf - Vo*Vo)/(2*D);
doc.document.write('Sustituyendo: a=['+Vf+'2 - '+Vo+'2]/[2('+D+')]='+A+'
');
conocidaA=1;
}
//Calcular D //////////////////////////////////////////////////////////////////////////
if( (conocidaVo==1)&&(conocidaA==1)&&(conocidaD==0)&&(conocidaT==1) ){
doc.document.write('De la Ec. 2 obtenemos: d=Vot + at2/2
');
D=Vo*T + A*T*T*(0.5);
doc.document.write('Sustituyendo: d='+Vo+'('+T+') + ('+A+')'+T+'2/2='+D+'
');
conocidaD=1;
}
if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaA==1)&&(conocidaD==0) ){
doc.document.write('De la Ec. 3 obtenemos: d=[Vf2 - Vo2]/[2a]
');
D=(Vf*Vf - Vo*Vo)/(2*A);
doc.document.write('Sustituyendo: d=['+Vf+'2 - '+Vo+'2]/[2('+A+')]='+D+'
');
conocidaD=1;
}
if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaD==0)&&(conocidaT==1) ){
doc.document.write('De la Ec. 4 obtenemos: d=(t/2)[Vf + Vo]
');
D=(T/2)(Vf + Vo);
doc.document.write('Sustituyendo: d=('+T+'/2)['+Vf+' + '+Vo+']='+D+'
');
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
');
T=(Vf - Vo)/A;
doc.document.write('Sustituyendo: t=('+Vf+' - '+Vo+')/'+A+'='+T+'
');
conocidaT=1;
}
if( (conocidaVo==1)&&(conocidaVf==1)&&(conocidaD==1)&&(conocidaT==0) ){
doc.document.write('De la Ec. 4 obtenemos: t=(2d)/[Vf + Vo]
');
T=(2*D)/(Vf + Vo);
doc.document.write('Sustituyendo: t=2('+D+')/['+Vf+' + '+Vo+']='+T+'
');
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+'
');
doc.document.write('D='+D+'
');
doc.document.write('A='+A+'
');
doc.document.write('Vf='+Vf+'
');
doc.document.write('Vo='+Vo+'
');
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('');
doc.document.close();
}

Additional Resources/Info

Oldest comments (2)

Collapse
 
gerardocrdena14 profile image
Gerardo Cárdenas

I don´t know why some part of the code has a black background.

Collapse
 
wobsoriano profile image
Robert • Edited

Use three backticks then the programming language (i.e. javascript).

Here's a sample

console.log('Hello world');

Alt text of image