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

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
(Решение)
(Обсуждение результатов и выводы)
 
(не показано 11 промежуточных версий этого же участника)
Строка 49: Строка 49:
  
 
     ctx.fillStyle="#8888ff";
 
     ctx.fillStyle="#8888ff";
                         
+
                         
        var vx = 2, vy = 2;                        // скорость шара
+
    var r = 5;                                 
        var r = 5;                                // радиус шара
 
 
 
 
var grass_height = 5;
 
var grass_height = 5;
 
var mountian_length = 400;
 
var mountian_length = 400;
 
 
var sin_alpha_1 = 0.5;
 
var sin_alpha_1 = 0.5;
 
var cos_alpha_1 = 0.866;
 
var cos_alpha_1 = 0.866;
 
 
var sun_r = 50;
 
var sun_r = 50;
var rx = 0, ry =  mountian_length * sin_alpha_1 / cos_alpha_1 - r;
+
var rx1 = 0, ry1 (mountian_length)* sin_alpha_1 / cos_alpha_1 - r;
 +
var rx2 = 40, ry2 =  (mountian_length + rx2 - 4 * r) * sin_alpha_1 / cos_alpha_1;
 +
var rx3 = 80, ry3 =  (mountian_length + rx3 - 6 * r) * sin_alpha_1 / cos_alpha_1;
 
 
 
var g = 2;
 
var g = 2;
var dt = 0.1;
+
var dt = 0.15;
 
var m = 1;
 
var m = 1;
 
var B = 0.06;
 
var B = 0.06;
 
var B2 = 0.09;
 
var B2 = 0.09;
var fy = 0;
+
var vx1 = 2, vy1 = 2;
var fx = 0;
+
var vx2 = 2, vy2 = 2;
 +
var vx3 = 2, vy3 = 2;
 +
var fy1 = 0;
 +
var fx1 = 0;
 +
var fy2 = 0;
 +
var fx2 = 0;
 +
var fy3 = 0;
 +
var fx3 = 0;
 +
 +
var mu1 = 0.2;
 +
 +
var a1 = g * (sin_alpha_1 - mu1 * cos_alpha_1);
  
 
     function step() {                           
 
     function step() {                           
Строка 76: Строка 85:
  
 
     function tick() {   
 
     function tick() {   
if (rx + r > 0 && rx - r < mountian_length && ry < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1)
+
if (rx1 + r > 0 && rx1 - r < mountian_length && ry1 < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx1
                                                                    * rx + mountian_length * sin_alpha_1 / cos_alpha_1) {
+
+ mountian_length * sin_alpha_1 / cos_alpha_1) {
fy = m * g - B * vy;
+
fy1 = m * g - B * vy1;
fx = m * g - B * vx;
+
fx1 = m * g - B * vx1;
 
+
vy1 = vy1 + fy1 / m * dt * sin_alpha_1;
vy = vy + fy / m * dt * sin_alpha_1;
+
vx1 = vx1 + fx1 / m * dt * cos_alpha_1;
vx = vx + fx / m * dt * cos_alpha_1;
+
ry1 = ry1 + vy1 * dt * sin_alpha_1;
 
+
rx1 = rx1 + vx1 * dt * cos_alpha_1;
ry = ry + vy * dt * sin_alpha_1;
+
rx = rx + vx * dt * cos_alpha_1;
+
}
 +
if (rx1 - r > mountian_length){
 +
 +
fx1 = - B2 * vx1;
 +
vx1 = vx1 + fx1 / m * dt;
 +
rx1 = rx1 + vx1 * dt;
 +
ry1 = height - grass_height;
 +
}
 +
if (rx2 + r > 0 && rx2 - r < mountian_length && ry2 < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx2
 +
+ mountian_length * sin_alpha_1 / cos_alpha_1) {
 +
fy2 = m * g - B * vy2;
 +
fx2 = m * g - B * vx2;
 +
vy2 = vy2 + fy2 / m * dt * sin_alpha_1;
 +
vx2 = vx2 + fx2 / m * dt * cos_alpha_1;
 +
ry2 = ry2 + vy2 * dt * sin_alpha_1;
 +
rx2 = rx2 + vx2 * dt * cos_alpha_1;
 +
}
 +
if (rx2 - r > mountian_length){
 +
ry2 = height - grass_height;
 +
fx2 = - B2 * vx2;
 +
vx2 = vx2 + fx2 / m * dt;
 +
rx2 = rx2 + vx2 * dt;
 +
}
 +
if (rx3 + r > 0 && rx3 - r < mountian_length && ry3 < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx3
 +
+ mountian_length * sin_alpha_1 / cos_alpha_1) {
 +
fy3 = m * g - B * vy3;
 +
fx3 = m * g - B * vx3;
 +
vy3 = vy3 + fy3 / m * dt * sin_alpha_1;
 +
vx3 = vx3 + fx3 / m * dt * cos_alpha_1;
 +
ry3 = ry3 + vy3 * dt * sin_alpha_1;
 +
rx3 = rx3 + vx3 * dt * cos_alpha_1;
 
}
 
}
if (rx - r > mountian_length){
+
if (rx3 - r > mountian_length){
 
+
ry3 = height - grass_height;
fx = - B2 * vx;
+
fx3 = - B2 * vx3;
vx = vx + fx / m * dt;
+
vx3 = vx3 + fx3 / m * dt;
rx = rx + vx * dt;
+
rx3 = rx3 + vx3 * dt;
 
}
 
}
 
          
 
          
Строка 119: Строка 158:
 
 
 
ctx.fillStyle="#fff200"; //sun
 
ctx.fillStyle="#fff200"; //sun
                ctx.beginPath();
+
        ctx.beginPath();
                ctx.arc(width, 0, sun_r, 0, 2 * Math.PI);
+
        ctx.arc(width, 0, sun_r, 0, 2 * Math.PI);
                ctx.fill();
+
        ctx.fill();
 
 
ctx.fillStyle="#e6e5d1"; //snow
+
ctx.fillStyle="#ff0000"; //snow1
 
ctx.beginPath();
 
ctx.beginPath();
                ctx.arc(rx, ry, r, 0, 2 * Math.PI);
+
        ctx.arc(rx1, ry1, r, 0, 2 * Math.PI);
                ctx.fill();
+
        ctx.fill();
 +
 +
ctx.fillStyle="#0900ff"; //snow2
 +
ctx.beginPath();
 +
        ctx.arc(rx2, ry2, r, 0, 2 * Math.PI);
 +
        ctx.fill();
 +
 +
ctx.fillStyle="#e6e5d1"; //snow3
 +
ctx.beginPath();
 +
        ctx.arc(rx3, ry3, r, 0, 2 * Math.PI);
 +
        ctx.fill();
 
         
 
         
 
 
Строка 134: Строка 183:
  
 
}
 
}
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Строка 153: Строка 201:
  
 
== Обсуждение результатов и выводы ==
 
== Обсуждение результатов и выводы ==
В ходе работы над курсовым проектом была разработана простейшая модель, визуализирующая процесс схода лавины. Было установлено, что при увеличении коэффициента пропорциональности между силой <math> F </math>, действующей на частицу и скоростью частицы <math> v </math>  уменьшается координата конечного положения частицы. При увеличении начальной скорости <math> v </math> увеличивается координата конечного положения частицы.
+
В ходе работы над курсовым проектом была разработана простейшая модель, анализирующая процессы, происходящие при сходе лавины. Было установлено, что при увеличении коэффициента пропорциональности между силой <math> F </math>, действующей на частицу, и скоростью частицы <math> v </math>  уменьшается координата конечного положения частицы. При увеличении начальной скорости <math> v </math> увеличивается координата конечного положения частицы.
 +
 
 +
Из программы видно, что частица, находящаяся выше, "обогнала" частицу, находящуюся ниже. Такое изменение в положении частиц произошло из-за того, что частицы, скатывающаяся с большей высоты, приобретают при спуске большую скорость.Также видно, что в конечный момент времени расстояние между частицами уменьшается по сравнению с расстоянием между начальными положениями, т.е. происходит "кучкование" частиц. Следовательно, можно сделать вывод о том, что линейные размеры района, охваченного снежной массой после схода лавины, значительно меньше линейных размеров снежной массы, из которой образуется лавина. 
  
 
Дальнейшие предложения по проекту:
 
Дальнейшие предложения по проекту:
* Увеличить число частиц, дав возможность пользователю выбирать количество с помощью движка
+
* Увеличить число частиц, дав возможность пользователю выбирать количество с помощью движка;
* Дать возможность пользователю менять коэффициент пропорциональности с помощью движка
+
* Дать возможность пользователю менять коэффициент пропорциональности с помощью движка;
* Добавить движок, позволяющий менять угол наклона горы
+
* Добавить движок, позволяющий менять угол наклона горы;
  
  
Строка 164: Строка 214:
 
[[Медиа:avalanche.doc|Скачать отчет]]
 
[[Медиа:avalanche.doc|Скачать отчет]]
 
<br>
 
<br>
Скачать презентацию:
+
[[Медиа:ДИНАМИКА_ЛАВИНЫ.pptx|Скачать презентацию]]
 +
<br>
  
 
== Ссылки по теме ==
 
== Ссылки по теме ==

Текущая версия на 16:47, 30 июня 2015

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

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

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

Группа: 09 (23604)

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

Аннотация проекта[править]

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


Формулировка задачи[править]

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


Общие сведения по теме[править]

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

Наиболее благоприятными для лавинообразования являются склоны крутизной [math] 25-40^\circ[/math]. Сход со склона скопившейся снежной массы обычно провоцируется климатическими причинами: резкой сменой погоды, дождями, а также механическими воздействиями на снежную массу. Иногда, в силу установившегося относительного равновесия между действующей силой трения и силой давления, сход лавины может инициироваться незначительным толчком (например, звуком ружейного выстрела или давлением на снег одного человека — горнолыжника, сноубордиста)

Решение[править]

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

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

При движении по наклонной плоскости шары скатываются со склона за счет силы тяжести [math] F_{mg} [/math], однако удерживаются на склоне за счет силы трения [math] F_{тр1}[/math]. При данном движении меняются координаты частицы и по оси ординат, и по оси абсцисс. Сила, действующая на частицу, вычисляется по формуле [math] F = mg-Bv[/math], где [math] B [/math] - коэффициент, связывающий скорость частицы и силу.

После того, как шары скатились со склона, они продолжают движение по горизонтальной поверхности, замедляясь за счет силы трения [math] F_{тр2}[/math]. Сила, действующая на частицу, считается аналогично [math] F=-B_2v[/math], однако взят другой коэффициент пропорциональности и составляющие, отвечающие за движение по вертикали взаимоуничтожают друг друга, за счёт чего происходит лишь торможение по горизонтальной оси.

Изначально частицы расположены на расстоянии, превышающим радиус частицы в 8 раз.

Визуализация задачи[править]

Текст программы на языке 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 r = 5;                                 
 10 	var grass_height = 5;
 11 	var mountian_length = 400;
 12 	var sin_alpha_1 = 0.5;
 13 	var cos_alpha_1 = 0.866;
 14 	var sun_r = 50;
 15 	var rx1 = 0, ry1 =  (mountian_length)* sin_alpha_1 / cos_alpha_1 - r;
 16 	var rx2 = 40, ry2 =  (mountian_length + rx2 - 4 * r) * sin_alpha_1 / cos_alpha_1;
 17 	var rx3 = 80, ry3 =  (mountian_length + rx3 - 6 * r) * sin_alpha_1 / cos_alpha_1;
 18 	
 19 	var g = 2;
 20 	var dt = 0.15;
 21 	var m = 1;
 22 	var B = 0.06;
 23 	var B2 = 0.09;
 24 	var vx1 = 2, vy1 = 2;
 25 	var vx2 = 2, vy2 = 2;
 26 	var vx3 = 2, vy3 = 2;
 27 	var fy1 = 0;
 28 	var fx1 = 0;
 29 	var fy2 = 0;
 30 	var fx2 = 0;
 31 	var fy3 = 0;
 32 	var fx3 = 0;
 33 	
 34 	var mu1 = 0.2;
 35 	
 36 	var a1 = g * (sin_alpha_1 - mu1 * cos_alpha_1);
 37 
 38     function step() {                           
 39         tick();
 40         draw();
 41     }
 42 
 43     function tick() {  
 44 		if (rx1 + r > 0 && rx1 - r < mountian_length && ry1 < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx1 
 45 											+ mountian_length * sin_alpha_1 / cos_alpha_1) {
 46 			fy1 = m * g - B * vy1;
 47 			fx1 = m * g - B * vx1;
 48 			vy1 = vy1 + fy1 / m * dt * sin_alpha_1;
 49 			vx1 = vx1 + fx1 / m * dt * cos_alpha_1;
 50 			ry1 = ry1 + vy1 * dt * sin_alpha_1;
 51 			rx1 = rx1 + vx1 * dt * cos_alpha_1; 
 52 			
 53 		}
 54 		if (rx1 - r > mountian_length){
 55 			
 56 			fx1 = - B2 * vx1;
 57 			vx1 = vx1 + fx1 / m * dt;
 58 			rx1 = rx1 + vx1 * dt;
 59 			ry1 = height - grass_height;
 60 		}
 61 		if (rx2 + r > 0 && rx2 - r < mountian_length && ry2 < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx2 
 62 											+ mountian_length * sin_alpha_1 / cos_alpha_1) {
 63 			fy2 = m * g - B * vy2;
 64 			fx2 = m * g - B * vx2;
 65 			vy2 = vy2 + fy2 / m * dt * sin_alpha_1;
 66 			vx2 = vx2 + fx2 / m * dt * cos_alpha_1;
 67 			ry2 = ry2 + vy2 * dt * sin_alpha_1;
 68 			rx2 = rx2 + vx2 * dt * cos_alpha_1;
 69 		}
 70 		if (rx2 - r > mountian_length){
 71 			ry2 = height - grass_height;
 72 			fx2 = - B2 * vx2;
 73 			vx2 = vx2 + fx2 / m * dt;
 74 			rx2 = rx2 + vx2 * dt;
 75 		}
 76 		if (rx3 + r > 0 && rx3 - r < mountian_length && ry3 < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx3
 77 											+ mountian_length * sin_alpha_1 / cos_alpha_1) {
 78 			fy3 = m * g - B * vy3;
 79 			fx3 = m * g - B * vx3;
 80 			vy3 = vy3 + fy3 / m * dt * sin_alpha_1;
 81 			vx3 = vx3 + fx3 / m * dt * cos_alpha_1;
 82 			ry3 = ry3 + vy3 * dt * sin_alpha_1;
 83 			rx3 = rx3 + vx3 * dt * cos_alpha_1;
 84 		}
 85 		if (rx3 - r > mountian_length){
 86 			ry3 = height - grass_height;
 87 			fx3 = - B2 * vx3;
 88 			vx3 = vx3 + fx3 / m * dt;
 89 			rx3 = rx3 + vx3 * dt;
 90 		}
 91         
 92     }
 93 
 94     function draw() { 
 95 		
 96         ctx.clearRect(0, 0, width, height);     //clear
 97 		ctx.beginPath();
 98 		
 99 		ctx.fillStyle="#49b9ed"; //sky
100 		ctx.beginPath();
101 		ctx.fillRect(0, 0, width, height);
102 		
103 		ctx.fillStyle="#16a600"; //grass
104 		ctx.beginPath();
105 		ctx.fillRect(0, height - grass_height, width, height);
106 		
107 		ctx.fillStyle="#57564c"; //mountain
108 		ctx.beginPath();
109 		ctx.moveTo(0, height - grass_height);
110 		ctx.lineTo(mountian_length, height - grass_height);
111 		ctx.lineTo(0, mountian_length * sin_alpha_1 / cos_alpha_1);
112 		ctx.lineTo(0, height - grass_height);
113 		ctx.fill();
114 		
115 		
116 		ctx.fillStyle="#fff200"; //sun
117         ctx.beginPath();
118         ctx.arc(width, 0, sun_r, 0, 2 * Math.PI);
119         ctx.fill();
120 		
121 		ctx.fillStyle="#ff0000"; //snow1
122 		ctx.beginPath();
123         ctx.arc(rx1, ry1, r, 0, 2 * Math.PI);
124         ctx.fill();
125 		
126 		ctx.fillStyle="#0900ff"; //snow2
127 		ctx.beginPath();
128         ctx.arc(rx2, ry2, r, 0, 2 * Math.PI);
129         ctx.fill();
130 		
131 		ctx.fillStyle="#e6e5d1"; //snow3
132 		ctx.beginPath();
133         ctx.arc(rx3, ry3, r, 0, 2 * Math.PI);
134         ctx.fill();
135 		        
136 				
137     }
138 
139     setInterval(step, 1000 / 60);               // функция step будет запускаться 60 раз в секунду (60 раз / 1000 мс)
140 
141 }

Файл "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>

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

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

Из программы видно, что частица, находящаяся выше, "обогнала" частицу, находящуюся ниже. Такое изменение в положении частиц произошло из-за того, что частицы, скатывающаяся с большей высоты, приобретают при спуске большую скорость.Также видно, что в конечный момент времени расстояние между частицами уменьшается по сравнению с расстоянием между начальными положениями, т.е. происходит "кучкование" частиц. Следовательно, можно сделать вывод о том, что линейные размеры района, охваченного снежной массой после схода лавины, значительно меньше линейных размеров снежной массы, из которой образуется лавина.

Дальнейшие предложения по проекту:

  • Увеличить число частиц, дав возможность пользователю выбирать количество с помощью движка;
  • Дать возможность пользователю менять коэффициент пропорциональности с помощью движка;
  • Добавить движок, позволяющий менять угол наклона горы;



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

Ссылки по теме[править]

См. также[править]