Ws-htmlets/js2020/Galov$Shilov/html.html — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
Движение частицы в гравитационном и электромагнитном полях
 
Движение частицы в гравитационном и электромагнитном полях
  
Исполнители:[[Галов_Владислав|Галов Владислав]],[[Шилов_Михаил|Шилов Михаил]],[[Борисенков_Богдан|Борисенков Богдан]]
+
Исполнители: [[Галов_Владислав|Галов Владислав]], [[Шилов_Михаил|Шилов Михаил]], [[Борисенков_Богдан|Борисенков Богдан]]
 
== Визуализация ==
 
== Визуализация ==
 
{{#widget:Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Galov$Shilov/html.html | width=800 | height=800 | border=0}}
 
{{#widget:Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Galov$Shilov/html.html | width=800 | height=800 | border=0}}
Строка 11: Строка 11:
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
window.addEventListener("load", main, false);
 
window.addEventListener("load", main, false);
 +
 
function main(){
 
function main(){
 
var ctx = canv.getContext('2d');
 
var ctx = canv.getContext('2d');
 +
 
var h = canv.height;
 
var h = canv.height;
 +
 
var w = canv.width;
 
var w = canv.width;
 
 
 
var E = 10; var Mod = 100000000; var Ma1 = 100000000; var Ma2 = 50000000;
 
var E = 10; var Mod = 100000000; var Ma1 = 100000000; var Ma2 = 50000000;
 +
 
var radod = 100;
 
var radod = 100;
var rad1 = 100; var rad2 = 50;
+
 
 +
var rad1 = 100;
 +
 
 +
        var rad2 = 50;
 +
 
 
var rad = 10;
 
var rad = 10;
 +
 
var x; var y; var m;
 
var x; var y; var m;
 +
 
var vx = 0; var vy = 0; var aex = 0; var aey = 0; var atsx = 0; var atsy = 0;
 
var vx = 0; var vy = 0; var aex = 0; var aey = 0; var atsx = 0; var atsy = 0;
 +
 
var axg = 0; var ayg = 0;
 
var axg = 0; var ayg = 0;
 +
 
var Flx = 0; var Fly = 0; var xo; var yo;
 
var Flx = 0; var Fly = 0; var xo; var yo;
 
 
 
var fps = 60;
 
var fps = 60;
 +
 
var dt = 1/fps;
 
var dt = 1/fps;
 +
 
 
 
canv.onclick = function(event){
 
canv.onclick = function(event){
 +
 
dt = 1/fps;
 
dt = 1/fps;
 +
 
var rect = canv.getBoundingClientRect();
 
var rect = canv.getBoundingClientRect();
 +
 
x = event.clientX - rect.left;
 
x = event.clientX - rect.left;
 +
 
y = event.clientY - rect.top;
 
y = event.clientY - rect.top;
 +
 +
 +
}
 +
 +
 +
 +
function phys1(){
 +
 +
m = document.getElementById('polz').value;
 +
 +
var radf = document.getElementsByName('field');
 +
 +
var radn = document.getElementsByName('kolvo');
 +
 +
var rads = document.getElementsByName('sput')
 +
 +
var radd = document.getElementsByName('direct');
 +
 +
var radc = document.getElementsByName('ch');
 +
 +
if (radf[0].checked==true){
 +
 +
if (rads[1].checked==true){
 +
 +
if (radn[0].checked==true){
 +
 +
var rod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
 +
 +
var cosod = (250-x)/rod;
 +
 +
var sinod = (250-y)/rod;
 +
 +
var fg = m*Mod/(rod*rod);
 +
 +
var fgx = fg*cosod; var fgy = fg*sinod;
 +
 +
axg = fgx/m; ayg = fgy/m;
 +
 +
x = x+3*axg*dt*dt/2;
 +
 +
y = y+3*ayg*dt*dt/2;
 +
 +
}
 +
 +
if (radn[1].checked==true){
 +
 +
var r1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
 +
 +
var r2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
 +
 +
var cos1 = (350-x)/r1;
 +
 +
var cos2 = (100-x)/r2;
 +
 +
var sin1 = (350-y)/r1;
 +
 +
var sin2 = (100-y)/r2;
 +
 +
var fg1 = m*Ma1/(r1*r1);
 +
 +
var fg2 = m*Ma2/(r2*r2);
 +
 +
var fg1x = fg1*cos1; var fg2x = fg2*cos2;
 +
 +
var fg1y = fg1*sin1; var fg2y = fg2*sin2;
 +
 +
axg = (fg1x+fg2x)/m; ayg = (fg1y+fg2y)/m;
 +
 +
x = x+3*axg*dt*dt/2;
 +
 +
y = y+3*ayg*dt*dt/2;
 +
 +
if (r1<rad1+rad)dt=0;
 +
 +
if (r2<rad2+rad)dt=0;
 +
 +
}
 +
 
}
 
}
 
 
function phys1(){
+
if (rads[0].checked==true){
m = document.getElementById('polz').value;
+
var radf = document.getElementsByName('field');
+
if (radn[0].checked==true){
var radn = document.getElementsByName('kolvo');
+
var rads = document.getElementsByName('sput')
+
var rsod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
var radd = document.getElementsByName('direct');
+
var radc = document.getElementsByName('ch');
+
var cossod = (250-x)/rsod;
if (radf[0].checked==true){
+
if (rads[1].checked==true){
+
var sinsod = (250-y)/rsod;
if (radn[0].checked==true){
+
var rod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
+
var v = Math.sqrt(0.1*Mod/rsod);
var cosod = (250-x)/rod;
+
var sinod = (250-y)/rod;
+
vx = v*sinsod; vy = v*(-cossod);
var fg = m*Mod/(rod*rod);
+
var fgx = fg*cosod; var fgy = fg*sinod;
+
ac = v*v/rsod;
axg = fgx/m; ayg = fgy/m;
+
x = x+3*axg*dt*dt/2;
+
acx = ac*cossod; acy = ac*sinsod;
y = y+3*ayg*dt*dt/2;
+
}
+
x = x+vx*dt+acx*dt*dt/2;
if (radn[1].checked==true){
+
var r1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
+
y = y+vy*dt+acy*dt*dt/2;
var r2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
+
var cos1 = (350-x)/r1;
 
var cos2 = (100-x)/r2;
 
var sin1 = (350-y)/r1;
 
var sin2 = (100-y)/r2;
 
var fg1 = m*Ma1/(r1*r1);
 
var fg2 = m*Ma2/(r2*r2);
 
var fg1x = fg1*cos1; var fg2x = fg2*cos2;
 
var fg1y = fg1*sin1; var fg2y = fg2*sin2;
 
axg = (fg1x+fg2x)/m; ayg = (fg1y+fg2y)/m;
 
x = x+3*axg*dt*dt/2;
 
y = y+3*ayg*dt*dt/2;
 
if (r1<rad1+rad)dt=0;
 
if (r2<rad2+rad)dt=0;
 
}
 
 
}
 
}
if (rads[0].checked==true){
+
if (radn[0].checked==true){
+
if (radn[1].checked==true){
var rsod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
+
var cossod = (250-x)/rsod;
+
var rs1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
var sinsod = (250-y)/rsod;
+
var v = Math.sqrt(0.1*Mod/rsod);
+
var rs2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
vx = v*sinsod; vy = v*(-cossod);
+
ac = v*v/rsod;
+
if (rs1<=rs2+70){
acx = ac*cossod; acy = ac*sinsod;
+
 +
var coss1 = (350-x)/rs1;
 +
 +
var sins1 = (350-y)/rs1;
 +
 +
var v = Math.sqrt(0.1*Ma1/rs1);
 +
 +
vx = v*sins1; vy = v*(-coss1);
 +
 +
ac = v*v/rs1;
 +
 +
acx = ac*coss1; acy = ac*sins1;
 +
 
x = x+vx*dt+acx*dt*dt/2;
 
x = x+vx*dt+acx*dt*dt/2;
 +
 
y = y+vy*dt+acy*dt*dt/2;
 
y = y+vy*dt+acy*dt*dt/2;
 +
 
}
 
}
if (radn[1].checked==true){
+
var rs1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
+
else{
var rs2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
+
if (rs1<=rs2+70){
+
var coss2 = (100-x)/rs2;
var coss1 = (350-x)/rs1;
+
var sins1 = (350-y)/rs1;
+
var sins2 = (100-y)/rs2;
var v = Math.sqrt(0.1*Ma1/rs1);
+
vx = v*sins1; vy = v*(-coss1);
+
var v = Math.sqrt(0.1*Ma2/rs2);
ac = v*v/rs1;
+
acx = ac*coss1; acy = ac*sins1;
+
vx = -v*sins2; vy = v*coss2;
x = x+vx*dt+acx*dt*dt/2;
+
y = y+vy*dt+acy*dt*dt/2;
+
ac = v*v/rs2;
}
+
else{
+
acx = ac*coss2; acy = ac*sins2;
var coss2 = (100-x)/rs2;
+
var sins2 = (100-y)/rs2;
+
x = x+vx*dt+acx*dt*dt/2;
var v = Math.sqrt(0.1*Ma2/rs2);
+
vx = -v*sins2; vy = v*coss2;
+
y = y+vy*dt+acy*dt*dt/2;
ac = v*v/rs2;
+
acx = ac*coss2; acy = ac*sins2;
 
x = x+vx*dt+acx*dt*dt/2;
 
y = y+vy*dt+acy*dt*dt/2;
 
}
 
 
}
 
}
 +
 
}
 
}
 +
 +
}
 +
 +
}
 +
 +
if (radf[1].checked==true){
 +
 +
if (radd[0].checked==true && radc[0].checked==true ||
 +
 +
radd[1].checked==true && radc[1].checked==true){
 +
 +
atsy = vx/m;
 +
 +
atsx = (-vy)/m;
 +
 
}
 
}
if (radf[1].checked==true){
+
if (radd[0].checked==true && radc[0].checked==true ||
+
else{
radd[1].checked==true && radc[1].checked==true){
+
atsy = vx/m;
+
atsy = (-vx)/m;
atsx = (-vy)/m;
+
}
+
atsx = vy/m;
else{
+
atsy = (-vx)/m;
 
atsx = vy/m;
 
}
 
var radd2 = document.getElementsByName('direct2');
 
if (radd2[0].checked==true){aex = E/m;}
 
if (radd2[1].checked==true){aex = -E/m;}
 
x = x+vx*dt+(aex+atsx)*dt*dt/2;
 
y = y+vy*dt+atsy*dt*dt/2;
 
vx = vx+(aex+atsx)*dt;
 
vy = vy+atsy*dt;
 
if (x<-10 || y<-10 || x>w+10 || y>h+10) {vx = 0; vy = 0; atsx = 0; atsy = 0;};
 
 
}
 
}
 +
 +
var radd2 = document.getElementsByName('direct2');
 +
 +
if (radd2[0].checked==true){aex = E/m;}
 +
 +
if (radd2[1].checked==true){aex = -E/m;}
 +
 +
x = x+vx*dt+(aex+atsx)*dt*dt/2;
 +
 +
y = y+vy*dt+atsy*dt*dt/2;
 +
 +
vx = vx+(aex+atsx)*dt;
 +
 +
vy = vy+atsy*dt;
 +
 +
if (x<-10 || y<-10 || x>w+10 || y>h+10) {vx = 0; vy = 0; atsx = 0; atsy = 0;};
 +
 
}
 
}
 
 
function draw1(){
+
}
ctx.clearRect(0,0,500,500);
+
ctx.lineWidth="1";
+
 
var radf = document.getElementsByName('field');
+
var radn = document.getElementsByName('kolvo');
+
function draw1(){
var radd = document.getElementsByName('direct');
+
var radc = document.getElementsByName('ch');
+
ctx.clearRect(0,0,500,500);
if (radf[0].checked==true){
+
if (radn[0].checked==true){
+
ctx.lineWidth="1";
ctx.beginPath();
+
ctx.arc(250,250,radod,0,2*Math.PI);
+
var radf = document.getElementsByName('field');
ctx.stroke();
+
ctx.fillStyle="grey";
+
var radn = document.getElementsByName('kolvo');
ctx.fill();
+
var rod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
+
var radd = document.getElementsByName('direct');
if (rod<=radod+rad){
+
var sinod = Math.abs(y-250)/rod;
+
var radc = document.getElementsByName('ch');
var cosod = Math.abs(x-250)/rod;
+
if (x>250){x = 250+(radod+rad)*cosod;}
+
if (radf[0].checked==true){
else{x = 250-(radod+rad)*cosod;}
+
if (y>250){y = 250+(radod+rad)*sinod;}
+
if (radn[0].checked==true){
else{y = 250-(radod+rad)*sinod;}
+
}
+
ctx.beginPath();
ctx.beginPath();
+
ctx.arc(x,y,rad,0,2*Math.PI);
+
ctx.arc(250,250,radod,0,2*Math.PI);
ctx.stroke(); ctx.fillStyle="black";
+
ctx.fill();
+
ctx.stroke();
 +
 +
ctx.fillStyle="grey";
 +
 +
ctx.fill();
 +
 +
var rod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
 +
 +
if (rod<=radod+rad){
 +
 +
var sinod = Math.abs(y-250)/rod;
 +
 +
var cosod = Math.abs(x-250)/rod;
 +
 +
if (x>250){x = 250+(radod+rad)*cosod;}
 +
 +
else{x = 250-(radod+rad)*cosod;}
 +
 +
if (y>250){y = 250+(radod+rad)*sinod;}
 +
 +
else{y = 250-(radod+rad)*sinod;}
 +
 
}
 
}
if (radn[1].checked==true){
+
ctx.beginPath();
 
ctx.arc(350,350,rad1,0,2*Math.PI);
 
ctx.stroke();
 
ctx.fillStyle="brown";
 
ctx.fill();
 
ctx.beginPath();
 
ctx.arc(100,100,rad2,0,2*Math.PI);
 
ctx.stroke();
 
ctx.fillStyle="purple";
 
ctx.fill();
 
var r1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
 
var r2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
 
if (r1<=rad1+rad){
 
var sin1 = Math.abs(y-350)/r1;
 
var cos1 = Math.abs(x-350)/r1;
 
if (x>350){x = 350+(rad1+rad)*cos1;}
 
else{x = 350-(rad1+rad)*cos1;}
 
if (y>350){y = 350+(rad1+rad)*sin1;}
 
else{y = 350-(rad1+rad)*sin1;}
 
}
 
if (r2<=rad2+rad){
 
var sin2 = Math.abs(y-100)/r2;
 
var cos2 = Math.abs(x-100)/r2;
 
if (x>100){x = 100+(rad2+rad)*cos2;}
 
else{x = 100-(rad2+rad)*cos2;}
 
if (y>100){y = 100+(rad2+rad)*sin2;}
 
else{y = 100-(rad2+rad)*sin2;}
 
}
 
ctx.beginPath();
 
ctx.arc(x,y,rad,0,2*Math.PI);
 
ctx.stroke(); ctx.fillStyle="black";
 
ctx.fill();
 
}
 
}
 
if (radf[1].checked==true){
 
 
ctx.beginPath();
 
ctx.beginPath();
 +
 
ctx.arc(x,y,rad,0,2*Math.PI);
 
ctx.arc(x,y,rad,0,2*Math.PI);
 +
 
ctx.stroke(); ctx.fillStyle="black";
 
ctx.stroke(); ctx.fillStyle="black";
 +
 
ctx.fill();
 
ctx.fill();
 +
 +
}
 +
 +
if (radn[1].checked==true){
 +
 
ctx.beginPath();
 
ctx.beginPath();
ctx.arc(30,30,15,0,2*Math.PI);
+
ctx.strokeStyle="grey";
+
ctx.arc(350,350,rad1,0,2*Math.PI);
 +
 
ctx.stroke();
 
ctx.stroke();
if (radd[1].checked==true){
+
ctx.beginPath();
+
ctx.fillStyle="brown";
ctx.moveTo(19.4,19.4);
+
ctx.lineTo(40.6,40.6);
+
ctx.fill();
ctx.stroke();
+
ctx.beginPath();
+
ctx.beginPath();
ctx.moveTo(19.4,40.6);
+
ctx.lineTo(40.6,19.4);
+
ctx.arc(100,100,rad2,0,2*Math.PI);
ctx.stroke();
+
 +
ctx.stroke();
 +
 +
ctx.fillStyle="purple";
 +
 +
ctx.fill();
 +
 +
var r1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
 +
 +
var r2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
 +
 +
if (r1<=rad1+rad){
 +
 +
var sin1 = Math.abs(y-350)/r1;
 +
 +
var cos1 = Math.abs(x-350)/r1;
 +
 +
if (x>350){x = 350+(rad1+rad)*cos1;}
 +
 +
else{x = 350-(rad1+rad)*cos1;}
 +
 +
if (y>350){y = 350+(rad1+rad)*sin1;}
 +
 +
else{y = 350-(rad1+rad)*sin1;}
 +
 
}
 
}
else{
+
ctx.beginPath();
+
if (r2<=rad2+rad){
ctx.arc(30,30,1,0,2*Math.PI);
+
ctx.fillStyle="grey";
+
var sin2 = Math.abs(y-100)/r2;
ctx.fill();
+
ctx.stroke();
+
var cos2 = Math.abs(x-100)/r2;
 +
 +
if (x>100){x = 100+(rad2+rad)*cos2;}
 +
 +
else{x = 100-(rad2+rad)*cos2;}
 +
 +
if (y>100){y = 100+(rad2+rad)*sin2;}
 +
 +
else{y = 100-(rad2+rad)*sin2;}
 +
 
}
 
}
 +
 +
ctx.beginPath();
 +
 +
ctx.arc(x,y,rad,0,2*Math.PI);
 +
 +
ctx.stroke(); ctx.fillStyle="black";
 +
 +
ctx.fill();
 +
 +
}
 +
 +
}
 +
 +
if (radf[1].checked==true){
 +
 +
ctx.beginPath();
 +
 +
ctx.arc(x,y,rad,0,2*Math.PI);
 +
 +
ctx.stroke(); ctx.fillStyle="black";
 +
 +
ctx.fill();
 +
 +
ctx.beginPath();
 +
 +
ctx.arc(30,30,15,0,2*Math.PI);
 +
 +
ctx.strokeStyle="grey";
 +
 +
ctx.stroke();
 +
 +
if (radd[1].checked==true){
 +
 
ctx.beginPath();
 
ctx.beginPath();
ctx.moveTo(x-5,y);
+
ctx.lineTo(x+5,y);
+
ctx.moveTo(19.4,19.4);
if (radc[0].checked==true){
+
ctx.moveTo(x,y-5);
+
ctx.lineTo(40.6,40.6);
ctx.lineTo(x,y+5);
+
}
+
ctx.stroke();
ctx.strokeStyle="white";
+
ctx.lineWidth="3";
+
ctx.beginPath();
 +
 +
ctx.moveTo(19.4,40.6);
 +
 +
ctx.lineTo(40.6,19.4);
 +
 +
ctx.stroke();
 +
 +
}
 +
 +
else{
 +
 +
ctx.beginPath();
 +
 +
ctx.arc(30,30,1,0,2*Math.PI);
 +
 +
ctx.fillStyle="grey";
 +
 +
ctx.fill();
 +
 
ctx.stroke();
 
ctx.stroke();
 +
 
}
 
}
 +
 +
ctx.beginPath();
 +
 +
ctx.moveTo(x-5,y);
 +
 +
ctx.lineTo(x+5,y);
 +
 +
if (radc[0].checked==true){
 +
 +
ctx.moveTo(x,y-5);
 +
 +
ctx.lineTo(x,y+5);
 +
 +
}
 +
 +
ctx.strokeStyle="white";
 +
 +
ctx.lineWidth="3";
 +
 +
ctx.stroke();
 +
 
}
 
}
 
 
function control(){
+
}
phys1();
+
draw1();
+
 
}
+
 +
function control(){
 +
 +
phys1();
 +
 +
draw1();
 +
 +
}
 +
 +
 
 +
 +
var radf = document.getElementsByName('field');
 +
 
 +
 +
if (radf[0].checked==true){setInterval(control, 100/fps);}
 +
 
 
 
var radf = document.getElementsByName('field');
+
if (radf[1].checked==true){setInterval(control, 0.1/fps);}
if (radf[0].checked==true){setInterval(control, 100/fps);}
+
 
if (radf[1].checked==true){setInterval(control, 0.1/fps);}
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</div>
 
</div>

Версия 12:59, 2 июня 2020

Описание

Движение частицы в гравитационном и электромагнитном полях

Исполнители: Галов Владислав, Шилов Михаил, Борисенков Богдан

Визуализация

Код программы

Код программы на языке JavaScript:
  1 window.addEventListener("load", main, false);
  2 
  3 function main(){
  4 	var ctx = canv.getContext('2d');
  5 
  6 	var h = canv.height;
  7 
  8 	var w = canv.width;
  9 	
 10 	var E = 10; var Mod = 100000000; var Ma1 = 100000000; var Ma2 = 50000000;
 11 
 12 	var radod = 100;
 13 
 14 	var rad1 = 100;
 15 
 16         var rad2 = 50;
 17 
 18 	var rad = 10;
 19 
 20 	var x; var y; var m;
 21 
 22 	var vx = 0; var vy = 0; var aex = 0; var aey = 0; var atsx = 0; var atsy = 0;
 23 
 24 	var axg = 0; var ayg = 0;
 25 
 26 	var Flx = 0; var Fly = 0; var xo; var yo;
 27 	
 28 	var fps = 60;
 29 
 30 	var dt = 1/fps;
 31 
 32 	
 33 	canv.onclick = function(event){
 34 
 35 		dt = 1/fps;
 36 
 37 		var rect = canv.getBoundingClientRect();
 38 
 39 		x = event.clientX - rect.left;
 40 
 41 		y = event.clientY - rect.top;
 42 
 43 	
 44 }
 45 	
 46 
 47 	
 48 function phys1(){
 49 	
 50 	m = document.getElementById('polz').value;
 51 	
 52 	var radf = document.getElementsByName('field');
 53 	
 54 	var radn = document.getElementsByName('kolvo');
 55 	
 56 	var rads = document.getElementsByName('sput')
 57 	
 58 	var radd = document.getElementsByName('direct');
 59 	
 60 	var radc = document.getElementsByName('ch');
 61 	
 62 	if (radf[0].checked==true){
 63 	
 64 	if (rads[1].checked==true){
 65 	
 66 		if (radn[0].checked==true){
 67 	
 68 			var rod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
 69 	
 70 			var cosod = (250-x)/rod;
 71 	
 72 			var sinod = (250-y)/rod;
 73 	
 74 			var fg = m*Mod/(rod*rod);
 75 	
 76 			var fgx = fg*cosod; var fgy = fg*sinod;
 77 	
 78 			axg = fgx/m; ayg = fgy/m;
 79 	
 80 			x = x+3*axg*dt*dt/2;
 81 	
 82 			y = y+3*ayg*dt*dt/2;
 83 	
 84 		}
 85 	
 86 		if (radn[1].checked==true){
 87 	
 88 			var r1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
 89 	
 90 			var r2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
 91 	
 92 			var cos1 = (350-x)/r1;
 93 	
 94 			var cos2 = (100-x)/r2;
 95 	
 96 			var sin1 = (350-y)/r1;
 97 	
 98 			var sin2 = (100-y)/r2;
 99 	
100 			var fg1 = m*Ma1/(r1*r1);
101 	
102 			var fg2 = m*Ma2/(r2*r2);
103 	
104 			var fg1x = fg1*cos1; var fg2x = fg2*cos2;
105 	
106 			var fg1y = fg1*sin1; var fg2y = fg2*sin2;
107 	
108 			axg = (fg1x+fg2x)/m; ayg = (fg1y+fg2y)/m;
109 	
110 			x = x+3*axg*dt*dt/2;
111 	
112 			y = y+3*ayg*dt*dt/2;
113 	
114 			if (r1<rad1+rad)dt=0;
115 	
116 			if (r2<rad2+rad)dt=0;
117 	
118 			}
119 	
120 	}
121 	
122 	if (rads[0].checked==true){
123 	
124 		if (radn[0].checked==true){
125 	
126 			var rsod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
127 	
128 			var cossod = (250-x)/rsod;
129 	
130 			var sinsod = (250-y)/rsod;
131 	
132 			var v = Math.sqrt(0.1*Mod/rsod);
133 	
134 			vx = v*sinsod; vy = v*(-cossod);
135 	
136 			ac = v*v/rsod;
137 	
138 			acx = ac*cossod; acy = ac*sinsod;
139 	
140 			x = x+vx*dt+acx*dt*dt/2;
141 	
142 			y = y+vy*dt+acy*dt*dt/2;
143 	
144 		}
145 	
146 		if (radn[1].checked==true){
147 	
148 			var rs1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
149 	
150 			var rs2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
151 	
152 			if (rs1<=rs2+70){
153 	
154 				var coss1 = (350-x)/rs1;
155 	
156 				var sins1 = (350-y)/rs1;
157 	
158 				var v = Math.sqrt(0.1*Ma1/rs1);
159 	
160 				vx = v*sins1; vy = v*(-coss1);
161 	
162 				ac = v*v/rs1;
163 	
164 				acx = ac*coss1; acy = ac*sins1;
165 	
166 				x = x+vx*dt+acx*dt*dt/2;
167 	
168 				y = y+vy*dt+acy*dt*dt/2;
169 	
170 			}
171 	
172 			else{
173 	
174 				var coss2 = (100-x)/rs2;
175 	
176 				var sins2 = (100-y)/rs2;
177 	
178 				var v = Math.sqrt(0.1*Ma2/rs2);
179 	
180 				vx = -v*sins2; vy = v*coss2;
181 	
182 				ac = v*v/rs2;
183 	
184 				acx = ac*coss2; acy = ac*sins2;
185 	
186 				x = x+vx*dt+acx*dt*dt/2;
187 	
188 				y = y+vy*dt+acy*dt*dt/2;
189 	
190 			}
191 	
192 		}
193 	
194 	}
195 	
196 	}
197 	
198 	if (radf[1].checked==true){
199 	
200 		if (radd[0].checked==true && radc[0].checked==true ||
201 	
202 		radd[1].checked==true && radc[1].checked==true){
203 	
204 			atsy = vx/m;
205 	
206 			atsx = (-vy)/m;
207 	
208 		}
209 	
210 		else{
211 	
212 			atsy = (-vx)/m;
213 	
214 			atsx = vy/m;
215 	
216 		}
217 	
218 		var radd2 = document.getElementsByName('direct2');
219 	
220 		if (radd2[0].checked==true){aex = E/m;}
221 	
222 		if (radd2[1].checked==true){aex = -E/m;}
223 	
224 		x = x+vx*dt+(aex+atsx)*dt*dt/2;
225 	
226 		y = y+vy*dt+atsy*dt*dt/2;
227 	
228 		vx = vx+(aex+atsx)*dt;
229 	
230 		vy = vy+atsy*dt;
231 	
232 		if (x<-10 || y<-10 || x>w+10 || y>h+10) {vx = 0; vy = 0; atsx = 0; atsy = 0;};
233 	
234 	}
235 	
236 }
237 	
238 
239 	
240 function draw1(){
241 	
242 	ctx.clearRect(0,0,500,500);
243 	
244 	ctx.lineWidth="1";
245 	
246 	var radf = document.getElementsByName('field');
247 	
248 	var radn = document.getElementsByName('kolvo');
249 	
250 	var radd = document.getElementsByName('direct');
251 	
252 	var radc = document.getElementsByName('ch');
253 	
254 	if (radf[0].checked==true){
255 	
256 		if (radn[0].checked==true){
257 	
258 			ctx.beginPath();
259 	
260 			ctx.arc(250,250,radod,0,2*Math.PI);
261 	
262 			ctx.stroke();
263 	
264 			ctx.fillStyle="grey";
265 	
266 			ctx.fill();
267 	
268 			var rod = Math.sqrt((x-250)*(x-250)+(y-250)*(y-250));
269 	
270 			if (rod<=radod+rad){
271 	
272 				var sinod = Math.abs(y-250)/rod;
273 	
274 				var cosod = Math.abs(x-250)/rod;
275 	
276 				if (x>250){x = 250+(radod+rad)*cosod;}
277 	
278 				else{x = 250-(radod+rad)*cosod;}
279 	
280 				if (y>250){y = 250+(radod+rad)*sinod;}
281 	
282 				else{y = 250-(radod+rad)*sinod;}
283 	
284 			}
285 	
286 			ctx.beginPath();
287 	
288 			ctx.arc(x,y,rad,0,2*Math.PI);
289 	
290 			ctx.stroke(); ctx.fillStyle="black";
291 	
292 			ctx.fill();
293 	
294 		}
295 	
296 		if (radn[1].checked==true){
297 	
298 			ctx.beginPath();
299 	
300 			ctx.arc(350,350,rad1,0,2*Math.PI);
301 	
302 			ctx.stroke();
303 	
304 			ctx.fillStyle="brown";
305 	
306 			ctx.fill();
307 	
308 			ctx.beginPath();
309 	
310 			ctx.arc(100,100,rad2,0,2*Math.PI);
311 	
312 			ctx.stroke();
313 	
314 			ctx.fillStyle="purple";
315 	
316 			ctx.fill();
317 	
318 			var r1 = Math.sqrt((x-350)*(x-350)+(y-350)*(y-350));
319 	
320 			var r2 = Math.sqrt((x-100)*(x-100)+(y-100)*(y-100));
321 	
322 			if (r1<=rad1+rad){
323 	
324 				var sin1 = Math.abs(y-350)/r1;
325 	
326 				var cos1 = Math.abs(x-350)/r1;
327 	
328 				if (x>350){x = 350+(rad1+rad)*cos1;}
329 	
330 				else{x = 350-(rad1+rad)*cos1;}
331 	
332 				if (y>350){y = 350+(rad1+rad)*sin1;}
333 	
334 				else{y = 350-(rad1+rad)*sin1;}
335 	
336 			}
337 	
338 			if (r2<=rad2+rad){
339 	
340 				var sin2 = Math.abs(y-100)/r2;
341 	
342 				var cos2 = Math.abs(x-100)/r2;
343 	
344 				if (x>100){x = 100+(rad2+rad)*cos2;}
345 	
346 				else{x = 100-(rad2+rad)*cos2;}
347 	
348 				if (y>100){y = 100+(rad2+rad)*sin2;}
349 	
350 				else{y = 100-(rad2+rad)*sin2;}
351 	
352 			}
353 	
354 			ctx.beginPath();
355 	
356 			ctx.arc(x,y,rad,0,2*Math.PI);
357 	
358 			ctx.stroke(); ctx.fillStyle="black";
359 	
360 			ctx.fill();
361 	
362 		}
363 	
364 	}
365 	
366 	if (radf[1].checked==true){
367 	
368 		ctx.beginPath();
369 	
370 		ctx.arc(x,y,rad,0,2*Math.PI);
371 	
372 		ctx.stroke(); ctx.fillStyle="black";
373 	
374 		ctx.fill();
375 	
376 		ctx.beginPath();
377 	
378 		ctx.arc(30,30,15,0,2*Math.PI);
379 	
380 		ctx.strokeStyle="grey";
381 	
382 		ctx.stroke();
383 	
384 		if (radd[1].checked==true){
385 	
386 			ctx.beginPath();
387 	
388 			ctx.moveTo(19.4,19.4);
389 	
390 			ctx.lineTo(40.6,40.6);
391 	
392 			ctx.stroke();
393 	
394 			ctx.beginPath();
395 	
396 			ctx.moveTo(19.4,40.6);
397 	
398 			ctx.lineTo(40.6,19.4);
399 	
400 			ctx.stroke();
401 	
402 		}
403 	
404 		else{
405 	
406 			ctx.beginPath();
407 	
408 			ctx.arc(30,30,1,0,2*Math.PI);
409 	
410 			ctx.fillStyle="grey";
411 	
412 			ctx.fill();
413 	
414 			ctx.stroke();
415 	
416 		}
417 	
418 		ctx.beginPath();
419 	
420 		ctx.moveTo(x-5,y);
421 	
422 		ctx.lineTo(x+5,y);
423 	
424 		if (radc[0].checked==true){
425 	
426 			ctx.moveTo(x,y-5);
427 	
428 			ctx.lineTo(x,y+5);
429 	
430 		}
431 	
432 		ctx.strokeStyle="white";
433 	
434 		ctx.lineWidth="3";
435 	
436 		ctx.stroke();
437 	
438 	}
439 	
440 }
441 	
442 
443 	
444 function control(){
445 	
446 	phys1();
447 	
448 	draw1();
449 	
450 }
451 	
452 
453 	
454 var radf = document.getElementsByName('field');
455 
456 	
457 if (radf[0].checked==true){setInterval(control, 100/fps);}
458 
459 	
460 if (radf[1].checked==true){setInterval(control, 0.1/fps);}
461 
462 }