Редактирование: Колебания с двумя степенями свободы

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 5: Строка 5:
  
  
Линеаризованные уравнения движения системы будут выглядеть так:
+
Уравнения движения системы будут выглядеть так:
 
::<math>
 
::<math>
 
  \ddot{x}  + \frac{g}{L}  x = 0  \\
 
  \ddot{x}  + \frac{g}{L}  x = 0  \\
Строка 13: Строка 13:
  
  
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Pogodina/Koleb2mayatnik/new1.html |width=1000 |height=2000 |border=0 }}
+
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Pogodina/Koleb2mayatnik/new1.html |width=1000 |height=750 |border=0 }}
  
 
Скачать [[Медиа:New1.rar|New1.rar]].
 
Скачать [[Медиа:New1.rar|New1.rar]].
Строка 28: Строка 28:
 
var context1 = canvasBalls1.getContext("2d");  // на context1 происходит рисование
 
var context1 = canvasBalls1.getContext("2d");  // на context1 происходит рисование
 
var context2 = canvasBalls2.getContext("2d");  // на context2 происходит рисование
 
var context2 = canvasBalls2.getContext("2d");  // на context2 происходит рисование
 +
var c1 = 5;
 
var Pi = 3.1415926;                  // число "пи"
 
var Pi = 3.1415926;                  // число "пи"
 
     var a0 = 1;                          // масштаб расстояния (диаметр шара)
 
     var a0 = 1;                          // масштаб расстояния (диаметр шара)
Строка 43: Строка 44:
 
var m = 1 * m0;                      // масса
 
var m = 1 * m0;                      // масса
 
var g = 0.25 * g0;              // ускорение свободного падения
 
var g = 0.25 * g0;              // ускорение свободного падения
var c = 1 * C0;                  // жесткость пружины
+
var c = c1 * C0;                  // жесткость пружины
var l = 3 * a0;                  // длина пружины
+
var l0 = 6 * a0;                  // длина пружины
 +
var L = l0 + m * g / c;            // длина пружины под воздействием силы тяжести
 
var time = 0;
 
var time = 0;
  
  
Text_c.value  = c;
+
Text_c.value  = c1;
 
Text_m.value  = m;
 
Text_m.value  = m;
Text_l.value = l;
+
     
 
 
     Slider_c.min = 1;                           
 
     Slider_c.min = 1;                           
     Slider_c.max = 100;
+
     Slider_c.max = 10;
 
     Slider_c.step = 0.5;
 
     Slider_c.step = 0.5;
 
     Slider_c.value = Text_c.value;   
 
     Slider_c.value = Text_c.value;   
 
 
 
Slider_m.min = 1;                           
 
Slider_m.min = 1;                           
     Slider_m.max = 100;
+
     Slider_m.max = 3;
     Slider_m.step = 0.5;
+
     Slider_m.step = 0.1;
 
     Slider_m.value = Text_m.value;  
 
     Slider_m.value = Text_m.value;  
 
 
Slider_l.min = 1;                         
 
    Slider_l.max = 5;
 
    Slider_l.step = 0.5;
 
    Slider_l.value = Text_l.value;
 
 
 
var L ;            // длина пружины под воздействием силы тяжести
 
 
// *** Задание вычислительных параметров ***
 
// *** Задание вычислительных параметров ***
 
   
 
   
Строка 83: Строка 78:
 
   
 
   
 
     var b = [];
 
     var b = [];
     b.x = w / 2;            b.y = l;    // расчетные координаты шара
+
     b.x = w / 2;            b.y = h * 0.7;    // расчетные координаты шара
 
b.vx = 0.5;            b.vy = 0.5;    // начальная скорость
 
b.vx = 0.5;            b.vy = 0.5;    // начальная скорость
 
 
Строка 95: Строка 90:
 
 
 
function physics1() {                    // то, что происходит каждый шаг времени
 
function physics1() {                    // то, что происходит каждый шаг времени
         = l + m * g / c;
+
         for (var s = 1; s <= spf; s++) {
//document.getElementById('text').innerHTML = '<b>'+l/scale+'</b>';
+
            b.vx += -g / L * (b.x - w/2) * dt;          b.vy += -c / m * (b.y - h * 0.7) * dt;
for (var s = 1; s <= spf; s++) {
+
            b.x += b.vx * dt;                          b.y += b.vy * dt;
             b.vx += -g / L * (b.x - w/2) * dt;         b.vy += -c / m * (b.y - l) * dt;  
+
        }
 +
    }
 +
 +
/* function physics2() {                    // то, что происходит каждый шаг времени
 +
        for (var s = 1; s <= spf; s++) {
 +
 +
             b.vx += -c * (Math.sqrt(Math.pow((L + b.y - h * 0.7),2) + Math.pow((b.x - w/2), 2)  - l0)) * (b.x - w/2) / (Math.sqrt(Math.pow((L + b.y - h * 0.7),2) + Math.pow((b.x - w/2),2))) / m * dt;        
 +
b.vy += -c * (Math.sqrt(Math.pow((L + b.y - h * 0.7),2) + Math.pow((b.x - w/2), 2)  - l0)) * (L + b.y - h * 0.7) / (Math.sqrt(Math.pow((L + b.y - h * 0.7),2) + Math.pow((b.x - w/2),2))) / m * dt;  
 
             b.x += b.vx * dt;                          b.y += b.vy * dt;
 
             b.x += b.vx * dt;                          b.y += b.vy * dt;
 
         }
 
         }
 
     }
 
     }
+
*/
 
     this.set_m = function(input)
 
     this.set_m = function(input)
 
         {
 
         {
 
m = Number(input);   
 
m = Number(input);   
 
                 time = 0;
 
                 time = 0;
b.x = w / 2;            b.y = l;     
+
b.x = w / 2;            b.y = h * 0.7;     
 
            b.vx = 0.5;            b.vy = 0.5;
 
            b.vx = 0.5;            b.vy = 0.5;
 
                 context.clearRect(0, 0, w * scale, h * scale);       
 
                 context.clearRect(0, 0, w * scale, h * scale);       
Строка 114: Строка 116:
 
         }
 
         }
 
   
 
   
 +
     
 
         this.set_c = function(input)
 
         this.set_c = function(input)
 
         {
 
         {
  
                 c = Number(input);   
+
                 c1 = Number(input);   
                time = 0;
+
                time = 0;
                 b.x = w / 2;            b.y = l;     
+
                 b.x = w / 2;            b.y = h * 0.7;     
 
            b.vx = 0.5;            b.vy = 0.5;  
 
            b.vx = 0.5;            b.vy = 0.5;  
 
context.clearRect(0, 0, w * scale, h* scale);       
 
context.clearRect(0, 0, w * scale, h* scale);       
 
                 context1.clearRect(0, 0, w * scale, h * scale);       
 
                 context1.clearRect(0, 0, w * scale, h * scale);       
 
                 context2.clearRect(0, 0, w * scale, h * scale);   
 
                 context2.clearRect(0, 0, w * scale, h * scale);   
        }
 
 
    this.set_l = function(input)
 
        {
 
l = Number(input); 
 
                time = 0;
 
b.x = w / 2;            b.y = l;   
 
            b.vx = 0.5;            b.vy = 0.5;
 
                context.clearRect(0, 0, w * scale, h * scale);     
 
                context1.clearRect(0, 0, w * scale, h * scale);     
 
                context2.clearRect(0, 0, w * scale, h * scale);
 
 
         }
 
         }
  
Строка 140: Строка 132:
 
context.fillStyle = "#ff0000";
 
context.fillStyle = "#ff0000";
 
         context.clearRect(0, 0, w * scale, h * scale);      // очистить экран
 
         context.clearRect(0, 0, w * scale, h * scale);      // очистить экран
draw_spring(w / 2, b.x, 0, b.y,0.25, 12);
+
        context.beginPath();
context.beginPath();
+
         conte xt.arc(b.x * scale, b.y * scale, r * scale / 3, 0, 2 * Math.PI, false);                  //рисуем шар
         context.arc(b.x * scale, b.y * scale, r * scale / 3, 0, 2 * Math.PI, false);                  //рисуем шар
 
 
         context.fill();
 
         context.fill();
 
         context.closePath();
 
         context.closePath();
+
context.lineWidth="6";
 +
context.strokeStyle="#990099";
 +
context.beginPath();                                                                          //рисуем пружину
 +
context.moveTo(w/ 2 * scale, 0);
 +
context.lineTo(b.x * scale, b.y * scale);
 +
context.stroke();
 
 
 
context1.strokeStyle = "red";                                                            //рисуем график 1
 
context1.strokeStyle = "red";                                                            //рисуем график 1
 
         context1.beginPath();
 
         context1.beginPath();
         context1.moveTo(time * Math.sqrt(g / L) * 5 * scale, (b.x -  h / 6) * scale);
+
         context1.moveTo(time * Math.sqrt(c / m) / 20 * scale, (b.x -  h / 6) * scale);
         context1.lineTo((time + dt) * Math.sqrt(g / L) * 5 * scale, (b.x - h / 6) * scale);
+
         context1.lineTo((time + dt) * Math.sqrt(c / m) / 20 * scale, (b.x - h / 6) * scale);
 
         context1.stroke();
 
         context1.stroke();
 
 
Строка 166: Строка 162:
 
context2.strokeStyle = "#3070d0";                                                            //рисуем график 2
 
context2.strokeStyle = "#3070d0";                                                            //рисуем график 2
 
context2.beginPath();
 
context2.beginPath();
         context2.moveTo(time * Math.sqrt(c / m) * 5 * scale, (l - b.y + h / 2) * scale);
+
         context2.moveTo(time * Math.sqrt(c / m) * scale, (b.y - h / 5) * scale);
         context2.lineTo((time + dt) * Math.sqrt(c / m) * 5 *scale, (l - b.y + h / 2) * scale);
+
         context2.lineTo((time + dt) * Math.sqrt(c / m) * scale, (b.y - h / 5) * scale);
 
         context2.stroke();
 
         context2.stroke();
 
 
Строка 182: Строка 178:
 
 
 
time += dt;   
 
time += dt;   
}
 
function draw_spring(x_start, x_end, y_start, y_end, h, n) {
 
var L_x = x_end-x_start;
 
var L_y = y_end-y_start;
 
for (var i = 0; i < n; i++) {
 
var x_st = x_start + L_x / n * i;
 
var x_end = x_start + L_x / n * (i + 1);
 
var y_st = y_start + L_y / n * i;
 
var y_end = y_start + L_y / n * (i + 1);
 
var l_x = x_end - x_st;
 
var l_y = y_end - y_st;
 
context.beginPath();
 
context.bezierCurveTo(x_st * scale, y_st * scale, (x_st + l_x / 4 + h) * scale, (y_st + l_y / 4) * scale, (x_st + l_x / 2) * scale, (y_st + l_y /2) * scale);
 
context.bezierCurveTo((x_st + l_x / 2) * scale, (y_st + l_y / 2) * scale, (x_st + 3 * l_x / 4 - h) * scale, (y_st + 3 * l_y / 4) * scale, (x_st + l_x) * scale, (y_st + l_y)* scale) ;
 
context.stroke();
 
}
 
 
}
 
}
 
     
 
     
Строка 225: Строка 205:
 
         </I></font>
 
         </I></font>
 
     </div>
 
     </div>
        <!-- Длина пружины-->
 
        <div>
 
            l0=
 
        <input id="Text_l" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
 
          if (!this.checkValidity()) return;
 
          app.set_l(this.value);
 
          document.getElementById('Slider_l').value = this.value;
 
      ">
 
                <input type = "range"  id="Slider_l" style="width: 100px;" oninput="app.set_l(this.value); document.getElementById('Text_l').value = this.value;">
 
        </I></font>
 
    </div>
 
<div id="text"></div>
 
 
      <!-- Жесткость-->
 
      <!-- Жесткость-->
 
         <div>
 
         <div>
Строка 252: Строка 220:
 
         <canvas id="canvasBalls1" width="800" height="600" style="border:1px solid #000000;"></canvas>   
 
         <canvas id="canvasBalls1" width="800" height="600" style="border:1px solid #000000;"></canvas>   
 
         <div>
 
         <div>
         <b>Зависимость координаты y от k2*t:</b>
+
         <b>Зависимость координаты y от k1*t:</b>
 
     </div>     
 
     </div>     
 
         <canvas id="canvasBalls2" width="800" height="600" style="border:1px solid #000000;"></canvas>  
 
         <canvas id="canvasBalls2" width="800" height="600" style="border:1px solid #000000;"></canvas>  
Вам запрещено изменять защиту статьи. 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:

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