Редактирование: Задача о двух телах

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 2: Строка 2:
 
Решение и визуализация задачи двух тел.
 
Решение и визуализация задачи двух тел.
  
[[Шелых Екатерина|Шелых Екатерина]]
+
Исполнитель: [[Екатерина_Шелых|Шелых Екатерина]]
  
 
Файл:[[http://tm.spbstu.ru/htmlets/Shelykh_EI/KursovayaK.docx]]
 
Файл:[[http://tm.spbstu.ru/htmlets/Shelykh_EI/KursovayaK.docx]]
  
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Shelykh_EI/planA.html |width=1500 |height=1000 |border=0 }}
+
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Shelykh_EI/planA.html |width=1300 |height=1000 |border=0 }}
 
 
==Код программы==
 
<div class="mw-collapsible mw-collapsed">
 
'''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
var gravitationalConstant = 6.67*Math.pow(10,-11);//гравитационная постоянная
 
var point_x1 = 1200/6*3;
 
var point_y1 = 300;
 
var point_x2 = 1200/6*4;
 
var point_y2 = 300;
 
var sP = 1;
 
var k = 0;
 
var flag = 0;
 
function firstPaint(){
 
  var canvas = document.getElementById('pole');
 
  if (canvas.getContext){
 
      var ctx = canvas.getContext('2d');
 
  }
 
  var img1 = new Image();
 
      img1.src = "planet1.jpg";
 
  img1.onload = function(){
 
 
 
      var img = new Image();
 
          img.src = "space.jpg";
 
      img.onload = function(){
 
        var pattern = ctx.createPattern(img,"repeat");
 
            ctx.fillStyle = pattern;
 
            ctx.beginPath();
 
            ctx.clearRect(0,0,1500,800);
 
            ctx.moveTo(1,1);
 
            ctx.fillRect(0, 0, 1500, 800);
 
            ctx.closePath();
 
            ctx.beginPath();
 
            ctx.fillStyle = "#F6F231";
 
            ctx.arc(point_x1,point_y1,10,0,Math.PI*2);
 
            ctx.fill();
 
        var img2 = new Image();
 
            img2.src = "planet2.jpg";
 
        img2.onload = function(){
 
          var pattern2 = ctx.createPattern(img2,"repeat");
 
            ctx.beginPath();
 
            ctx.fillStyle = pattern2;
 
 
 
        ctx.moveTo(point_x2,point_y2);
 
        ctx.arc(point_x2,point_y2,10,0,Math.PI*2);
 
        ctx.fill();
 
      }
 
    }
 
}
 
 
 
}
 
function AddPlanet(x,y,mass,speed){
 
  this.x = x;
 
  this.y = y;
 
  this.mass = mass;
 
 
 
  this.M = this.mass*gravitationalConstant;
 
  this.speed = speed;
 
}
 
function makePlanets(){
 
  point_x1 = 1200/6*3;
 
  point_y1 = 300;
 
  point_x2 = 1200/6*4;
 
  point_y2 = 300;
 
  var mass =document.getElementById('firstMass').value*Math.pow(10,20);
 
  var speed = 1;
 
  var firstPlanet = new AddPlanet(point_x1,point_y1,mass,speed);
 
  mass = document.getElementById('secondMass').value*Math.pow(10,20);
 
  speed = 1;
 
  var secondPlanet = new AddPlanet(point_x1,point_y1,mass,speed);
 
 
 
 
 
  firstPlanet.r = Math.pow(10,7)*(point_x2 - point_x1 - (point_x2-point_x1)*firstPlanet.mass/(firstPlanet.mass + secondPlanet.mass));//радиус вектор 1 тела относительно центра масс системы
 
  secondPlanet.r =  Math.pow(10,7)*((point_x2-point_x1)*firstPlanet.mass/(firstPlanet.mass + secondPlanet.mass));//радиус вектор 1 тела относительно центра масс системы
 
  firstPlanet.massCenterX = point_x2 - (point_x2-point_x1)*firstPlanet.mass/(firstPlanet.mass + secondPlanet.mass);//рассчет x координыты центра масс
 
  firstPlanet.c = firstPlanet.speed*firstPlanet.r;//константы закона площадей
 
  secondPlanet.c = secondPlanet.speed*secondPlanet.r;//константы закона площадей
 
 
 
 
 
  firstPlanet.f = -firstPlanet.M + firstPlanet.speed*firstPlanet.c;//векторы Лапласса
 
  secondPlanet.f = -secondPlanet.M + secondPlanet.speed*secondPlanet.c;//векторы Лапласса
 
 
 
  firstPlanet.p = Math.pow(firstPlanet.c, 2)/firstPlanet.M/Math.pow(10,6); //фокальный параметр
 
  secondPlanet.p = Math.pow(secondPlanet.c, 2)/secondPlanet.M/Math.pow(10,6); //фокальный параметр
 
 
 
  firstPlanet.e = firstPlanet.f/firstPlanet.M;//эксцентриситет
 
  secondPlanet.e = secondPlanet.f/secondPlanet.M;//эксцентриситет
 
  console.log('e1=',firstPlanet.e,'e2=',secondPlanet.e);
 
 
 
  drawPlanets(firstPlanet,secondPlanet);
 
}
 
 
 
function drawPlanets(firstPlanet,secondPlanet){
 
  var canvas = document.getElementById('pole');
 
  if (canvas.getContext){
 
    var ctx = canvas.getContext('2d');
 
  }
 
 
 
  var img = new Image();
 
      img.src = "space.jpg";
 
  var img2 = new Image();
 
      img2.src = "planet2.jpg";
 
 
 
  var pattern2 = ctx.createPattern(img2,"repeat");
 
 
 
      img.onload = function() {
 
        var pattern = ctx.createPattern(img,"repeat");
 
        ctx.fillStyle = pattern;
 
 
 
        var angle = Math.PI;
 
        var angle2 = 0;
 
 
 
        firstPlanet.a = firstPlanet.p/(1 - firstPlanet.e)*6;
 
        firstPlanet.b = firstPlanet.p/Math.pow((1 - firstPlanet.e),0.5)*3;
 
        firstPlanet.c = Math.abs(firstPlanet.e*firstPlanet.a);//фокольное расстояние
 
          secondPlanet.a = secondPlanet.p/(1 - secondPlanet.e)*6;
 
          secondPlanet.b = secondPlanet.p/Math.pow((1 - secondPlanet.e),0.5)*3;
 
          secondPlanet.c = Math.abs(secondPlanet.e*secondPlanet.a);//фокольное расстояние
 
        firstPlanet.leftScope = firstPlanet.a*Math.cos(180);
 
        secondPlanet.scope = secondPlanet.a*Math.cos(0);
 
        point_x1 = firstPlanet.massCenterX + firstPlanet.c;
 
        point_x2 = firstPlanet.massCenterX - secondPlanet.c;
 
var x = 10, y = 390;
 
        var timerId = setInterval( function(){
 
          if (k==2){
 
            var a =1;
 
          }
 
          else{
 
            angle = angle + Math.PI/360;
 
            if (angle >= 2*Math.PI){
 
                  angle = 0;
 
              }
 
              angle2 = angle2 + Math.PI/360;
 
              if (angle2 >= 2*Math.PI){
 
                  angle2 = 0;
 
                }
 
              firstPlanet.x = point_x1 + firstPlanet.a*Math.cos(angle);
 
              firstPlanet.y = point_y1 + firstPlanet.b*Math.sin(angle);
 
 
 
              secondPlanet.x = point_x2 + secondPlanet.a*Math.cos(angle2);
 
              secondPlanet.y = point_y2 + secondPlanet.b*Math.sin(angle2);
 
              ctx.fillStyle = pattern;
 
                ctx.beginPath();
 
                ctx.clearRect(0,0,1500,800);
 
                ctx.moveTo(1,1);
 
                ctx.fillRect(0, 0, 1500, 800);
 
                ctx.closePath();
 
 
 
              ctx.beginPath();
 
              ctx.moveTo(firstPlanet.x,firstPlanet.y);
 
              ctx.fillStyle = "#F6F231";
 
              ctx.arc(firstPlanet.x,firstPlanet.y,10,0,2*Math.PI);
 
              ctx.fill();
 
 
 
              ctx.beginPath();
 
              ctx.moveTo(firstPlanet.x,firstPlanet.y);
 
              ctx.fillStyle = pattern2;
 
              ctx.arc(secondPlanet.x ,secondPlanet.y ,10,0,2*Math.PI);
 
              ctx.fill();
 
 
 
              ctx.beginPath();
 
              ctx.moveTo(firstPlanet.massCenterX,point_y1);
 
              ctx.fillStyle = "#1D067F";
 
              ctx.arc(firstPlanet.massCenterX,point_y1 ,4,0,2*Math.PI);
 
              ctx.fill();
 
 
 
              y = graph1(firstPlanet,secondPlanet,x,y);
 
              x = x + 1;
 
              if (k==1){
 
                clearTimeout(timerId);
 
                k = 0;
 
              }
 
            }
 
          },sP);
 
 
 
        };
 
}
 
 
 
 
 
function breakk(){
 
  k = 1;
 
}
 
 
 
 
 
function pausee(){
 
  if (k==0){
 
    k = 2;
 
  }
 
  else{
 
    k = 0;
 
  }
 
}
 
 
 
function graph1(firstPlanet,secondPlanet,x,y){
 
  var canvas = document.getElementById('pole2');
 
  if (canvas.getContext){
 
      var canvas = canvas.getContext('2d');
 
  }
 
 
 
 
 
if ( flag == 0){
 
  canvas.beginPath();
 
  canvas.strokeStyle = "#000000";
 
  canvas.moveTo(10,395);
 
  canvas.lineTo(10,10);
 
  canvas.lineTo(5,15);
 
  canvas.moveTo(10,10);
 
  canvas.lineTo(15,15);
 
  canvas.moveTo(5,390);
 
  canvas.lineTo(690,390);
 
  canvas.lineTo(685,395);
 
  canvas.moveTo(690,390);
 
  canvas.lineTo(685,385);
 
  canvas.moveTo(550,20);
 
  canvas.lineTo(550,100);
 
  canvas.lineTo(690,100);
 
  canvas.lineTo(690,20);
 
  canvas.lineTo(550,20);
 
  canvas.strokeStyle = "#000000";
 
  canvas.font = "20px serif";
 
  canvas.fillText('R(t)',20,20);
 
  canvas.stroke();
 
  flag = 1;
 
}
 
return lengAndDraw(firstPlanet,secondPlanet,canvas,x,y)
 
}
 
 
 
 
 
function lengAndDraw(firstPlanet,secondPlanet,canvas,x,y){
 
  var l = Math.sqrt( Math.pow(firstPlanet.x-secondPlanet.x,2) + Math.pow(firstPlanet.y - secondPlanet.y,2))/3.5;
 
//  console.log(l);
 
  canvas.beginPath();
 
  canvas.clearRect(550,20,140,80);
 
  canvas.strokeStyle = "#000000";
 
  canvas.moveTo(x,y);
 
  canvas.lineTo(x + 1, 390 - l);
 
  canvas.font = "20px serif";
 
  canvas.fillText('r = ' + Math.floor(l*3.5) + '*10^7', 570, 60);
 
  canvas.stroke();
 
  return (390 - l);
 
}
 
</syntaxhighlight>
 
</div>
 
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)