КП: Динамика лавины

Материал из Department of Theoretical and Applied Mechanics
Версия от 09:31, 11 июня 2015; Sizova (обсуждение | вклад) (Визуализация программы)

Перейти к: навигация, поиск
А.М. Кривцов > Теоретическая механика > Курсовые проекты ТМ 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"

 1 function main_dl_avalanche_finish() {
 2 
 3     var ctx = canvas_avalanche_finish.getContext("2d");
 4     var width = canvas_avalanche_finish.width;
 5     var height = canvas_avalanche_finish.height;
 6 
 7     ctx.fillStyle="#8888ff";
 8                            
 9         var vx = 2, vy = 2;                         // скорость шара
10         var r = 5;                                 // радиус шара
11 
12 	var grass_height = 5;
13 	var mountian_length = 400;
14 
15 	var sin_alpha_1 = 0.5;
16 	var cos_alpha_1 = 0.866;
17 
18 	var sun_r = 50;
19 	var rx = 0, ry =  mountian_length * sin_alpha_1 / cos_alpha_1 - r;
20 	
21 	var g = 2;
22 	var dt = 0.1;
23 	var m = 1;
24 	var B = 0.06;
25 	var B2 = 0.09;
26 	var fy = 0;
27 	var fx = 0;
28 
29     function step() {                           
30         tick();
31         draw();
32     }
33 
34     function tick() {  
35 		if (rx + r > 0 && rx - r < mountian_length && ry < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1)
36                                                                     * rx + mountian_length * sin_alpha_1 / cos_alpha_1) {
37 			fy = m * g - B * vy;
38 			fx = m * g - B * vx;
39 
40 			vy = vy + fy / m * dt * sin_alpha_1;
41 			vx = vx + fx / m * dt * cos_alpha_1;
42 
43 			ry = ry + vy * dt * sin_alpha_1;
44 			rx = rx + vx * dt * cos_alpha_1;
45 		}
46 		if (rx - r > mountian_length){
47 
48 			fx = - B2 * vx;
49 			vx = vx + fx / m * dt;
50 			rx = rx + vx * dt;
51 		}
52         
53     }
54 
55     function draw() { 
56 		
57         ctx.clearRect(0, 0, width, height);     //clear
58 		ctx.beginPath();
59 		
60 		ctx.fillStyle="#49b9ed"; //sky
61 		ctx.beginPath();
62 		ctx.fillRect(0, 0, width, height);
63 		
64 		ctx.fillStyle="#16a600"; //grass
65 		ctx.beginPath();
66 		ctx.fillRect(0, height - grass_height, width, height);
67 		
68 		ctx.fillStyle="#57564c"; //mountain
69 		ctx.beginPath();
70 		ctx.moveTo(0, height - grass_height);
71 		ctx.lineTo(mountian_length, height - grass_height);
72 		ctx.lineTo(0, mountian_length * sin_alpha_1 / cos_alpha_1);
73 		ctx.lineTo(0, height - grass_height);
74 		ctx.fill();
75 		
76 		
77 		ctx.fillStyle="#fff200"; //sun
78                 ctx.beginPath();
79                 ctx.arc(width, 0, sun_r, 0, 2 * Math.PI);
80                 ctx.fill();
81 		
82 		ctx.fillStyle="#e6e5d1"; //snow
83 		ctx.beginPath();
84                 ctx.arc(rx, ry, r, 0, 2 * Math.PI);
85                 ctx.fill();
86 		        
87 				
88     }
89 
90     setInterval(step, 1000 / 60);               // функция step будет запускаться 60 раз в секунду (60 раз / 1000 мс)
91 
92 }

Файл "dl_avalanche_finish.html"

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>Avalanche</title>
 5     <script src="dl_avalanche_finish.js"></script>
 6 </head>
 7 <body onload="main_dl_avalanche_finish();">
 8     <canvas id="canvas_avalanche_finish" width="800" height="400" style="border: 1px solid #000000"></canvas>
 9 </body>
10 </html>

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


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

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

См. также