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

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
(Решение)
(Обсуждение результатов и выводы)
 
(не показано 19 промежуточных версий 2 участников)
Строка 22: Строка 22:
 
Снег удерживается на склоне горы за счет силы трения. Сход лавины происходит в тот момент, когда сила давления массы снега начинает превышать силу трения.
 
Снег удерживается на склоне горы за счет силы трения. Сход лавины происходит в тот момент, когда сила давления массы снега начинает превышать силу трения.
  
Наиболее благоприятными для лавинообразования являются склоны крутизной 25—45°. Сход со склона скопившейся снежной массы обычно провоцируется климатическими причинами: резкой сменой погоды, дождями, а также механическими воздействиями на снежную массу. Иногда, в силу установившегося относительного равновесия между действующей силой трения и силой давления, сход лавины может инициироваться незначительным толчком (например, звуком ружейного выстрела или давлением на снег одного человека — горнолыжника, сноубордиста)
+
Наиболее благоприятными для лавинообразования являются склоны крутизной <math> 25-40^\circ</math>. Сход со склона скопившейся снежной массы обычно провоцируется климатическими причинами: резкой сменой погоды, дождями, а также механическими воздействиями на снежную массу. Иногда, в силу установившегося относительного равновесия между действующей силой трения и силой давления, сход лавины может инициироваться незначительным толчком (например, звуком ружейного выстрела или давлением на снег одного человека — горнолыжника, сноубордиста)
  
 
== Решение ==
 
== Решение ==
Моделирование схода лавины происходит в двумерном пространстве. В качестве простейшей модели горы был взят прямоугольный треугольник с углом наклона <math> 30^\circ </math>, а в качестве снежной массы - большое количество элементов-кругов радиуса <math>r</math>,имитирующих отдельные частицы снежной массы.
+
Моделирование схода лавины происходит в двумерном пространстве. В качестве простейшей модели горы был взят прямоугольный треугольник с углом наклона <math> 30^\circ </math>, а в качестве снежной массы - элементs-круги радиуса <math>r</math>, имитирующие отдельные частицы снежной массы.
  
 
Целесообразно разделить движение частицы на 2 части: движение по наклонной плоскости и движение по горизонтальной поверхности.
 
Целесообразно разделить движение частицы на 2 части: движение по наклонной плоскости и движение по горизонтальной поверхности.
Строка 33: Строка 33:
 
После того, как шары скатились со склона, они продолжают движение по горизонтальной поверхности, замедляясь за счет силы трения <math> F_{тр2}</math>. Сила, действующая на частицу, считается аналогично <math> F=-B_2v</math>, однако взят другой коэффициент пропорциональности и составляющие, отвечающие за движение по вертикали взаимоуничтожают друг друга, за счёт чего происходит лишь торможение по горизонтальной оси.
 
После того, как шары скатились со склона, они продолжают движение по горизонтальной поверхности, замедляясь за счет силы трения <math> F_{тр2}</math>. Сила, действующая на частицу, считается аналогично <math> F=-B_2v</math>, однако взят другой коэффициент пропорциональности и составляющие, отвечающие за движение по вертикали взаимоуничтожают друг друга, за счёт чего происходит лишь торможение по горизонтальной оси.
  
== Визуализация программы ==
+
Изначально частицы расположены на расстоянии, превышающим радиус частицы в 8 раз.
 +
 
 +
== Визуализация задачи==
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Sizova/dl_avalanche_finish.html | справа |width=900|height=500 |border=0 }}
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Sizova/dl_avalanche_finish.html | справа |width=900|height=500 |border=0 }}
  
Строка 47: Строка 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() {                           
Строка 74: Строка 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;
 
}
 
}
 
          
 
          
Строка 117: Строка 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="#ff0000"; //snow1
 +
ctx.beginPath();
 +
        ctx.arc(rx1, ry1, r, 0, 2 * Math.PI);
 +
        ctx.fill();
 +
 +
ctx.fillStyle="#0900ff"; //snow2
 +
ctx.beginPath();
 +
        ctx.arc(rx2, ry2, r, 0, 2 * Math.PI);
 +
        ctx.fill();
 
 
ctx.fillStyle="#e6e5d1"; //snow
+
ctx.fillStyle="#e6e5d1"; //snow3
 
ctx.beginPath();
 
ctx.beginPath();
                ctx.arc(rx, ry, r, 0, 2 * Math.PI);
+
        ctx.arc(rx3, ry3, r, 0, 2 * Math.PI);
                ctx.fill();
+
        ctx.fill();
 
         
 
         
 
 
Строка 132: Строка 183:
  
 
}
 
}
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Строка 151: Строка 201:
  
 
== Обсуждение результатов и выводы ==
 
== Обсуждение результатов и выводы ==
 +
В ходе работы над курсовым проектом была разработана простейшая модель, анализирующая процессы, происходящие при сходе лавины. Было установлено, что при увеличении коэффициента пропорциональности между силой <math> F </math>, действующей на частицу, и скоростью частицы <math> v </math>  уменьшается координата конечного положения частицы. При увеличении начальной скорости <math> v </math> увеличивается координата конечного положения частицы.
 +
 +
Из программы видно, что частица, находящаяся выше, "обогнала" частицу, находящуюся ниже. Такое изменение в положении частиц произошло из-за того, что частицы, скатывающаяся с большей высоты, приобретают при спуске большую скорость.Также видно, что в конечный момент времени расстояние между частицами уменьшается по сравнению с расстоянием между начальными положениями, т.е. происходит "кучкование" частиц. Следовательно, можно сделать вывод о том, что линейные размеры района, охваченного снежной массой после схода лавины, значительно меньше линейных размеров снежной массы, из которой образуется лавина. 
 +
 +
Дальнейшие предложения по проекту:
 +
* Увеличить число частиц, дав возможность пользователю выбирать количество с помощью движка;
 +
* Дать возможность пользователю менять коэффициент пропорциональности с помощью движка;
 +
* Добавить движок, позволяющий менять угол наклона горы;
  
  
Строка 156: Строка 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] увеличивается координата конечного положения частицы.

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

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

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



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

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

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