КП: Динамика лавины — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
(Визуализация программы)
(Визуализация программы)
Строка 56: Строка 56:
 
Файл '''"dl_avalanche_finish.js"'''
 
Файл '''"dl_avalanche_finish.js"'''
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 +
function main_dl_avalanche_finish() {
 +
 +
    var ctx = canvas_avalanche_finish.getContext("2d");
 +
    var width = canvas_avalanche_finish.width;
 +
    var height = canvas_avalanche_finish.height;
 +
 +
    ctx.fillStyle="#8888ff";
 +
                          // координаты шара
 +
    var vx = 2, vy = 2;                        // скорость шара
 +
    var r = 5;                                // радиус шара
 +
var grass_height = 5;
 +
var mountian_length = 400;
 +
var sin_alpha_1 = 0.5;
 +
var cos_alpha_1 = 0.866;
 +
var sun_r = 50;
 +
var rx = 0, ry =  mountian_length * sin_alpha_1 / cos_alpha_1 - r;
 +
 +
var g = 2;
 +
var dt = 0.1;
 +
var m = 1;
 +
var B = 0.06;
 +
var B2 = 0.09;
 +
var fy = 0;
 +
var fx = 0;
 +
 +
    function step() {                         
 +
        tick();
 +
        draw();
 +
    }
 +
 +
    function tick() { 
 +
if (rx + r > 0 && rx - r < mountian_length && ry < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx
 +
+ mountian_length * sin_alpha_1 / cos_alpha_1) {
 +
fy = m * g - B * vy;
 +
fx = m * g - B * vx;
 +
vy = vy + fy / m * dt * sin_alpha_1;
 +
vx = vx + fx / m * dt * cos_alpha_1;
 +
ry = ry + vy * dt * sin_alpha_1;
 +
rx = rx + vx * dt * cos_alpha_1;
 +
}
 +
if (rx - r > mountian_length){
 +
fx = - B2 * vx;
 +
vx = vx + fx / m * dt;
 +
rx = rx + vx * dt;
 +
}
 +
        //if (rx - r < 0 || rx + r > width) vx = -vx;
 +
        //if (ry - r < 0) vy = -vy;
 +
        //rx = rx + vx;
 +
        //ry = ry + vy;
 +
    }
 +
 +
    function draw() {
 +
 +
        ctx.clearRect(0, 0, width, height);    //clear
 +
ctx.beginPath();
 +
 +
ctx.fillStyle="#49b9ed"; //sky
 +
ctx.beginPath();
 +
ctx.fillRect(0, 0, width, height);
 +
 +
ctx.fillStyle="#16a600"; //grass
 +
ctx.beginPath();
 +
ctx.fillRect(0, height - grass_height, width, height);
 +
 +
ctx.fillStyle="#57564c"; //mountain
 +
ctx.beginPath();
 +
ctx.moveTo(0, height - grass_height);
 +
ctx.lineTo(mountian_length, height - grass_height);
 +
ctx.lineTo(0, mountian_length * sin_alpha_1 / cos_alpha_1);
 +
ctx.lineTo(0, height - grass_height);
 +
ctx.fill();
 +
 +
 +
ctx.fillStyle="#fff200"; //sun
 +
        ctx.beginPath();
 +
        ctx.arc(width, 0, sun_r, 0, 2 * Math.PI);
 +
        ctx.fill();
 +
 +
ctx.fillStyle="#e6e5d1"; //snow
 +
ctx.beginPath();
 +
        ctx.arc(rx, ry, r, 0, 2 * Math.PI);
 +
        ctx.fill();
 +
       
 +
 +
    }
 +
 +
    setInterval(step, 1000 / 60);              // функция step будет запускаться 60 раз в секунду (60 раз / 1000 мс)
 +
 +
}
  
 
== Обсуждение результатов и выводы ==
 
== Обсуждение результатов и выводы ==

Версия 09:24, 11 июня 2015

А.М. Кривцов > Теоретическая механика > Курсовые проекты ТМ 2015 > Динамика лавины
Сход лавины

Курсовой проект по Теоретической механике

Исполнитель: Сизова Екатерина

Группа: 09 (23604)

Семестр: весна 2015

Аннотация проекта

На данный момент лавины являются одним из самых опасных видов природных катастроф. Под снежными лавинами погибает большое количество горнолыжников, сноубордистов, горных туристов, а также происходит разрушение горных деревень, дорожной инфраструктуры и наносится экологический вред лесам. Целью данной работы является разработка модели лавины, условий, при которых происходит ее сход(отрыв), а также расчет последствий, к которым может привести сход лавины.


Формулировка задачи

  • разработка модели лавины, как набор шариков, обладающих определенной массой и находящихся в неустойчивом состоянии
  • расчет параметров отрыва(схода лавины), ее распространения, а также исследование динамических характеристик процесса жизненного цикла лавины


Общие сведения по теме

Снег удерживается на склоне горы за счет силы трения. Сход лавины происходит в тот момент, когда сила давления массы снега начинает превышать силу трения.

Наиболее благоприятными для лавинообразования являются склоны крутизной 25—45°. Сход со склона скопившейся снежной массы обычно провоцируется климатическими причинами: резкой сменой погоды, дождями, а также механическими воздействиями на снежную массу. Иногда, в силу установившегося относительного равновесия между действующей силой трения и силой давления, сход лавины может инициироваться незначительным толчком (например, звуком ружейного выстрела или давлением на снег одного человека — горнолыжника, сноубордиста)

Решение

Моделирование сходы лавины происходит в двумерном пространстве. В качестве простейшей модели горы был взят прямоугольный треугольник, а в качестве снежной массы - большое количество элементов-кругов радиуса [math]r[/math],имитирующих отдельные частицы снежной массы.

Целесообразно разделить движение шаров на 2 части: движение по наклонной плоскости и движение по горизонтальной поверхности.

При движении по наклонной плоскости шары скатываются со склона за счет силы тяжести [math] F_{mg} [/math].

[math] ma = mg + F_{тр} + N [/math]

[math] a = g(\sin\alpha - \mu \cos\alpha) [/math]

[math] v_x = at\cos\alpha, v_y = at\sin\alpha [/math]

[math] r_x = r_{0x} + \frac{at^2}{2}\cos\alpha, r_y = r_{0y} + \frac{at^2}{2}\cos\alpha [/math]

После того, как шары скатились со склона, они продолжают движение по горизонтальной поверхности, замедляясь за счет силы трения [math] F_{тр2}[/math].

Визуализация программы

Текст программы на языке JavaScript:

Файл "dl_avalanche_finish.js" <syntaxhighlight lang="javascript" line start="1" enclose="div"> function main_dl_avalanche_finish() {

   var ctx = canvas_avalanche_finish.getContext("2d");
   var width = canvas_avalanche_finish.width;
   var height = canvas_avalanche_finish.height;
   ctx.fillStyle="#8888ff";
                          // координаты шара
   var vx = 2, vy = 2;                         // скорость шара
   var r = 5;                                 // радиус шара

var grass_height = 5; var mountian_length = 400; var sin_alpha_1 = 0.5; var cos_alpha_1 = 0.866; var sun_r = 50; var rx = 0, ry = mountian_length * sin_alpha_1 / cos_alpha_1 - r;

var g = 2; var dt = 0.1; var m = 1; var B = 0.06; var B2 = 0.09; var fy = 0; var fx = 0;

   function step() {                           
       tick();
       draw();
   }
   function tick() {  

if (rx + r > 0 && rx - r < mountian_length && ry < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx + mountian_length * sin_alpha_1 / cos_alpha_1) { fy = m * g - B * vy; fx = m * g - B * vx; vy = vy + fy / m * dt * sin_alpha_1; vx = vx + fx / m * dt * cos_alpha_1; ry = ry + vy * dt * sin_alpha_1; rx = rx + vx * dt * cos_alpha_1; } if (rx - r > mountian_length){ fx = - B2 * vx; vx = vx + fx / m * dt; rx = rx + vx * dt; }

       //if (rx - r < 0 || rx + r > width) vx = -vx;
       //if (ry - r < 0) vy = -vy;
       //rx = rx + vx;
       //ry = ry + vy;
   }
   function draw() { 
       ctx.clearRect(0, 0, width, height);     //clear

ctx.beginPath();

ctx.fillStyle="#49b9ed"; //sky ctx.beginPath(); ctx.fillRect(0, 0, width, height);

ctx.fillStyle="#16a600"; //grass ctx.beginPath(); ctx.fillRect(0, height - grass_height, width, height);

ctx.fillStyle="#57564c"; //mountain ctx.beginPath(); ctx.moveTo(0, height - grass_height); ctx.lineTo(mountian_length, height - grass_height); ctx.lineTo(0, mountian_length * sin_alpha_1 / cos_alpha_1); ctx.lineTo(0, height - grass_height); ctx.fill();


ctx.fillStyle="#fff200"; //sun

       ctx.beginPath();
       ctx.arc(width, 0, sun_r, 0, 2 * Math.PI);
       ctx.fill();

ctx.fillStyle="#e6e5d1"; //snow ctx.beginPath();

       ctx.arc(rx, ry, r, 0, 2 * Math.PI);
       ctx.fill();


   }
   setInterval(step, 1000 / 60);               // функция step будет запускаться 60 раз в секунду (60 раз / 1000 мс)

}

Обсуждение результатов и выводы


Скачать отчет
Скачать презентацию:

Ссылки по теме

См. также