Текущая версия |
Ваш текст |
Строка 22: |
Строка 22: |
| Снег удерживается на склоне горы за счет силы трения. Сход лавины происходит в тот момент, когда сила давления массы снега начинает превышать силу трения. | | Снег удерживается на склоне горы за счет силы трения. Сход лавины происходит в тот момент, когда сила давления массы снега начинает превышать силу трения. |
| | | |
− | Наиболее благоприятными для лавинообразования являются склоны крутизной <math> 25-40^\circ</math>. Сход со склона скопившейся снежной массы обычно провоцируется климатическими причинами: резкой сменой погоды, дождями, а также механическими воздействиями на снежную массу. Иногда, в силу установившегося относительного равновесия между действующей силой трения и силой давления, сход лавины может инициироваться незначительным толчком (например, звуком ружейного выстрела или давлением на снег одного человека — горнолыжника, сноубордиста) | + | Наиболее благоприятными для лавинообразования являются склоны крутизной 25—45°. Сход со склона скопившейся снежной массы обычно провоцируется климатическими причинами: резкой сменой погоды, дождями, а также механическими воздействиями на снежную массу. Иногда, в силу установившегося относительного равновесия между действующей силой трения и силой давления, сход лавины может инициироваться незначительным толчком (например, звуком ружейного выстрела или давлением на снег одного человека — горнолыжника, сноубордиста) |
| | | |
| == Решение == | | == Решение == |
− | Моделирование схода лавины происходит в двумерном пространстве. В качестве простейшей модели горы был взят прямоугольный треугольник с углом наклона <math> 30^\circ </math>, а в качестве снежной массы - элементs-круги радиуса <math>r</math>, имитирующие отдельные частицы снежной массы. | + | Моделирование сходы лавины происходит в двумерном пространстве. В качестве простейшей модели горы был взят прямоугольный треугольник, а в качестве снежной массы - большое количество элементов-кругов радиуса <math>r</math>,имитирующих отдельные частицы снежной массы. |
| | | |
− | Целесообразно разделить движение частицы на 2 части: движение по наклонной плоскости и движение по горизонтальной поверхности.
| + | Шары скатываются со склона за счет силы тяжести <math> F_{mg} </math>. |
| | | |
− | При движении по наклонной плоскости шары скатываются со склона за счет силы тяжести <math> F_{mg} </math>, однако удерживаются на склоне за счет силы трения <math> F_{тр1}</math>. При данном движении меняются координаты частицы и по оси ординат, и по оси абсцисс. Сила, действующая на частицу, вычисляется по формуле <math> F = mg-Bv</math>, где <math> B </math> - коэффициент, связывающий скорость частицы и силу.
| + | <math> |
| + | ma = mg + F_{тр1} + N |
| + | </math> |
| | | |
− | После того, как шары скатились со склона, они продолжают движение по горизонтальной поверхности, замедляясь за счет силы трения <math> F_{тр2}</math>. Сила, действующая на частицу, считается аналогично <math> F=-B_2v</math>, однако взят другой коэффициент пропорциональности и составляющие, отвечающие за движение по вертикали взаимоуничтожают друг друга, за счёт чего происходит лишь торможение по горизонтальной оси.
| + | <math> |
| + | a = g(sin\alpha - \mu cos\alpha) |
| + | </math> |
| | | |
− | Изначально частицы расположены на расстоянии, превышающим радиус частицы в 8 раз.
| + | <math> |
| + | v_x = atcos\alpha, v_y = atsin\alpha |
| + | </math> |
| | | |
− | == Визуализация задачи== | + | <math> |
− | {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Sizova/dl_avalanche_finish.html | справа |width=900|height=500 |border=0 }} | + | r_x = r_{0x} + \frac{at^2}{2}cos\alpha, r_y = r_{0y} + \frac{at^2}{2}cos\alpha |
| + | </math> |
| | | |
− | <div class="mw-collapsible mw-collapsed">
| + | После того, как шары скатились со склона, они продолжают движение по горизонтальной поверхности, замедляясь за счет силы трения <math> F_{тр2}. |
− | '''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content">
| |
− | Файл '''"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 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 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 dt = 0.15;
| |
− | var m = 1;
| |
− | var B = 0.06;
| |
− | var B2 = 0.09;
| |
− | var vx1 = 2, vy1 = 2;
| |
− | 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() {
| |
− | tick();
| |
− | draw();
| |
− | }
| |
− | | |
− | function tick() {
| |
− | if (rx1 + r > 0 && rx1 - r < mountian_length && ry1 < (height - grass_height - mountian_length * sin_alpha_1 / cos_alpha_1) * rx1
| |
− | + mountian_length * sin_alpha_1 / cos_alpha_1) {
| |
− | fy1 = m * g - B * vy1;
| |
− | fx1 = m * g - B * vx1;
| |
− | vy1 = vy1 + fy1 / m * dt * sin_alpha_1;
| |
− | vx1 = vx1 + fx1 / m * dt * cos_alpha_1;
| |
− | ry1 = ry1 + vy1 * dt * sin_alpha_1;
| |
− | rx1 = rx1 + vx1 * 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 (rx3 - r > mountian_length){
| |
− | ry3 = height - grass_height;
| |
− | fx3 = - B2 * vx3;
| |
− | vx3 = vx3 + fx3 / m * dt;
| |
− | rx3 = rx3 + vx3 * dt;
| |
− | }
| |
− |
| |
− | }
| |
− | | |
− | 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="#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"; //snow3
| |
− | ctx.beginPath();
| |
− | ctx.arc(rx3, ry3, r, 0, 2 * Math.PI);
| |
− | ctx.fill();
| |
− |
| |
− |
| |
− | }
| |
− | | |
− | setInterval(step, 1000 / 60); // функция step будет запускаться 60 раз в секунду (60 раз / 1000 мс)
| |
− | | |
− | } | |
− | </syntaxhighlight>
| |
− | | |
− | Файл '''"dl_avalanche_finish.html"'''
| |
− | <syntaxhighlight lang="javascript" line start="1" enclose="div">
| |
− | <!DOCTYPE html>
| |
− | <html>
| |
− | <head>
| |
− | <title>Avalanche</title>
| |
− | <script src="dl_avalanche_finish.js"></script>
| |
− | </head>
| |
− | <body onload="main_dl_avalanche_finish();">
| |
− | <canvas id="canvas_avalanche_finish" width="800" height="400" style="border: 1px solid #000000"></canvas>
| |
− | </body>
| |
− | </html>
| |
− | </syntaxhighlight>
| |
− | </div>
| |
| | | |
| == Обсуждение результатов и выводы == | | == Обсуждение результатов и выводы == |
− | В ходе работы над курсовым проектом была разработана простейшая модель, анализирующая процессы, происходящие при сходе лавины. Было установлено, что при увеличении коэффициента пропорциональности между силой <math> F </math>, действующей на частицу, и скоростью частицы <math> v </math> уменьшается координата конечного положения частицы. При увеличении начальной скорости <math> v </math> увеличивается координата конечного положения частицы.
| |
| | | |
− | Из программы видно, что частица, находящаяся выше, "обогнала" частицу, находящуюся ниже. Такое изменение в положении частиц произошло из-за того, что частицы, скатывающаяся с большей высоты, приобретают при спуске большую скорость.Также видно, что в конечный момент времени расстояние между частицами уменьшается по сравнению с расстоянием между начальными положениями, т.е. происходит "кучкование" частиц. Следовательно, можно сделать вывод о том, что линейные размеры района, охваченного снежной массой после схода лавины, значительно меньше линейных размеров снежной массы, из которой образуется лавина.
| |
| | | |
− | Дальнейшие предложения по проекту:
| |
− | * Увеличить число частиц, дав возможность пользователю выбирать количество с помощью движка;
| |
− | * Дать возможность пользователю менять коэффициент пропорциональности с помощью движка;
| |
− | * Добавить движок, позволяющий менять угол наклона горы;
| |
− |
| |
− |
| |
− | <br>
| |
− | [[Медиа:avalanche.doc|Скачать отчет]]
| |
| <br> | | <br> |
− | [[Медиа:ДИНАМИКА_ЛАВИНЫ.pptx|Скачать презентацию]]
| + | Скачать отчет: |
| <br> | | <br> |
| + | Скачать презентацию: |
| | | |
| == Ссылки по теме == | | == Ссылки по теме == |