Редактирование: Двумерное уравнение теплопроводности + волновое уравнение

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 3: Строка 3:
 
Численное решение двумерного уравнения теплопроводности и двумерного волнового уравнения.
 
Численное решение двумерного уравнения теплопроводности и двумерного волнового уравнения.
  
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Heat_Wave_2D/Wave_Heat_2D_v2-4_release/Wave_Heat_2D.html |width=960 |height=965 |border=0 }}
+
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Heat_Wave_2D/Wave_Heat_2D_v2-0_release/Wave_Heat_2D.html |width=960 |height=765 |border=0 }}
  
  
Строка 13: Строка 13:
  
  
Скачать [[Медиа:Wave_Heat_2D_v2-4_release.zip|Wave_Heat_2D_v2-4_release.zip]].  
+
Скачать [[Медиа:Wave_Heat_2D_v2-0_release.zip|Wave_Heat_2D_v2-0_release.zip]].  
  
<div class="mw-collapsible mw-collapsed" style="width:100%" >
+
Текст программы на языке JavaScript (разработчики [[Цветков Денис]], [[Кривцов Антон]]): <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default">  
'''Текст программы на языке JavaScript (разработчики [[Цветков Денис]], [[Кривцов Антон]]):''' <div class="mw-collapsible-content">
 
 
Файл '''"Wave_Heat_2D.js"'''
 
Файл '''"Wave_Heat_2D.js"'''
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
 
window.addEventListener("load", main_equations, false);
 
window.addEventListener("load", main_equations, false);
 
function main_equations() {
 
function main_equations() {
  
 
     // Предварительные установки
 
     // Предварительные установки
 +
 
     var canv = init_canvas(Wave_Heat_2D_canvas);
 
     var canv = init_canvas(Wave_Heat_2D_canvas);
  
Строка 36: Строка 35:
 
     var fps = 15;                          // frames per second - количество кадров в секунду
 
     var fps = 15;                          // frames per second - количество кадров в секунду
 
     var dt = 0.005 * t0;                    // шаг интегрирования по времени
 
     var dt = 0.005 * t0;                    // шаг интегрирования по времени
    var t = 0;
 
  
 
     var p0 = m0 / (a0 * a0 * a0);          // единица плотности, кг/м3
 
     var p0 = m0 / (a0 * a0 * a0);          // единица плотности, кг/м3
Строка 55: Строка 53:
 
     var T_max = 10 * T0;
 
     var T_max = 10 * T0;
 
     var T_min = - T_max;
 
     var T_min = - T_max;
 +
 +
    var koeff1;
  
 
     var k0 = 2 * Math.PI / t0;              // масштаб частоты
 
     var k0 = 2 * Math.PI / t0;              // масштаб частоты
Строка 63: Строка 63:
  
 
     var omega = Math.sqrt(C / m);
 
     var omega = Math.sqrt(C / m);
     var cc = 2.3 * a0 * omega;
+
     var cc = a0 * omega;
 +
 
 +
    var tw = Nx * a0 / cc / 4;
 +
    var beta =  Math.PI * cc * cc * Math.sqrt(tw);
  
 
     var pause = false;
 
     var pause = false;
 
     button_pause.onclick = function () {pause = !pause;};
 
     button_pause.onclick = function () {pause = !pause;};
     button_clear.onclick = clear_button_func;
+
     button_clear.onclick = function () {
    function clear_button_func() {
+
         for (var i = 0; i < Nx; i++)
        clear_all();
+
         for (var j = 0; j < Ny; j++) {
        draw();
 
    }
 
    function clear_all() {
 
         for (var i = 1; i < Nx - 1; i++)
 
         for (var j = 1; j < Ny - 1; j++) {
 
 
                 T[i][j].u = 0;
 
                 T[i][j].u = 0;
 
                 T[i][j].v = 0;
 
                 T[i][j].v = 0;
                T[i][j].BC = false;
 
 
         }
 
         }
         BC2 = [];
+
         draw();
    }
+
    };
 
 
    var koeff1;
 
 
 
    // начальные условия - распределение Гаусса
 
    var T = [];
 
    for (var i = 0; i < Nx; i++) {
 
        T[i] = [];
 
        for (var j = 0; j < Ny; j++) {
 
            T[i][j] = {};
 
            var x = i / (Nx - 1);
 
            var y = j / (Ny - 1);
 
 
 
            var width = 0.05;
 
            var power = 15;
 
            var minus = 0;
 
 
 
            T[i][j].u = Math.exp(-Math.pow(x - 0.5, 2) / width) * Math.exp(-Math.pow(y - 0.5, 2) / width) * power - minus;
 
            T[i][j].v = 0;
 
            T[i][j].BC = false;
 
        }
 
    }
 
  
 
     function set_calc_func() {
 
     function set_calc_func() {
         if (radio_heat.checked) {
+
         if (redio_heat.checked) {
 
             heat_equation = true;
 
             heat_equation = true;
 
             slider_damping_power.disabled = true;
 
             slider_damping_power.disabled = true;
Строка 113: Строка 89:
 
             slider_damping_power.disabled = false;
 
             slider_damping_power.disabled = false;
 
             damping_span.style.color="#000000";
 
             damping_span.style.color="#000000";
             koeff1 = cc * cc / (dx * dy);
+
             koeff1 = beta / (dx * dy);
 
         }
 
         }
 
     }
 
     }
 
     var heat_equation;
 
     var heat_equation;
 
     set_calc_func();
 
     set_calc_func();
     radio_heat.onchange = set_calc_func;
+
     redio_heat.onchange = set_calc_func;
     radio_wave.onchange = set_calc_func;
+
     redio_wave.onchange = set_calc_func;
 
 
    function set_BC_func() {
 
        if (radio_BC_mirror.checked) BC_mirror();
 
        else if (radio_BC_periodic.checked) BC_periodic();
 
    }
 
    radio_BC_mirror.onclick = set_BC_func;
 
    radio_BC_periodic.onclick = set_BC_func;
 
 
 
    // функции и переменные, объявленные через this, можно будет вызывать по сокращенному названию (например, sin(x), PI)
 
    var math_methods = Object.getOwnPropertyNames(Math);
 
    for (var i in math_methods)
 
        this[math_methods[i]] = Math[math_methods[i]];
 
  
 
     var damping_power = 0;
 
     var damping_power = 0;
Строка 140: Строка 104:
 
     slider_damping_power.oninput = function() {damping_power = slider_damping_power.value};
 
     slider_damping_power.oninput = function() {damping_power = slider_damping_power.value};
  
     apply_IC_button.onclick = apply_IC;
+
     // начальные условия - распределение Гаусса
     function apply_IC() {
+
     var T = [];
        var script = document.createElement('script');
+
     for (var i = 0; i < Nx; i++) {
        script.innerHTML = "function IC_function(nx, ny, M, M_max, M_min, t, add_BC2) {" +
+
         T[i] = [];
            "for (var i = 0; i < nx; i++) {\r\n" +
+
         for (var j = 0; j < Ny; j++) {
            "    for (var j = 0; j < ny; j++) {\r\n" +
+
            T[i][j] = {};
            IC_text.value + "}}};";
+
            var x = i / (Nx - 1);
        document.getElementsByTagName('head')[0].appendChild(script);
+
             var y = j / (Ny - 1);
        clear_all();
 
        IC_function(nx, ny, M, T_max, T_min, t, add_BC2);
 
        draw();
 
    }
 
    clear_IC_window_button.onclick =  clear_IC_window;
 
     function clear_IC_window() {
 
        IC_text.value = "";
 
//        IC_text.value =
 
//            "for (var i = 0; i < nx; i++) {\r\n" +
 
//            "    for (var j = 0; j < ny; j++) {\r\n" +
 
//            "      \r\n" +
 
//            "    }\r\n" +
 
//            "}";
 
    }
 
    var functions_for_buttons = [
 
         "M[i][j].u = M_max * (sin(i / (nx - 1) * 2 * PI));\r\n"
 
      ,"M[i][j].v = M_max * (sin(i / (nx - 1) * 2 * PI));\r\n"
 
      ,"M[i][j].u = M_max * pow(sin(i / (nx - 1) * 2 * PI), 25);\r\n"
 
      ,"M[i][j].u = M_max * (sin((i + j) / (2*(nx - 1)) * 2 * PI));\r\n"
 
      ,"var lx = 0.5 - i / (nx - 1);\r\n" +
 
         "var ly = 0.5 - j / (ny - 1);\r\n" +
 
        "M[i][j].u = sin(sqrt(lx * lx + ly * ly) * 12 * PI) * 6;\r\n"
 
      ,"var lx = 0.5 - i / (nx - 1);\r\n" +
 
        "var ly = 0.5 - j / (ny - 1);\r\n" +
 
        "M[i][j].u = 1 / max(sqrt(lx * lx + ly * ly), 0.01);    // max - чтобы избежать деления на 0\r\n"
 
      ,"M[i][j].u = M_max * sin(i / (nx - 1) * 4 * PI) * sin(j / (ny - 1) * 4 * PI);\r\n"
 
      ,"M[i][j].u = M_max * sin(i / (nx - 1) * nx * PI) * sin(j / (ny - 1) * ny * PI);\r\n"
 
      ,"M[i][j].u = M_max * (min(sin(i / (nx - 1) * 9 * PI), sin(j / (ny - 1) * 9 * PI)));\r\n"
 
      ,"M[i][j].u = M_max * (2 * random() - 1);\r\n"
 
      ,"M[i][j].u = M_max * pow(2 * random() - 1, 201);\r\n"
 
      ,"M[i][j].u = - M_max * (sin(i / (nx - 1) * PI) * random());\r\n"
 
      ,"M[i][j].u = 2 * M_max * (i / (nx - 1)) - M_max;\r\n"
 
      ,"M[i][j].u = i / (nx - 1) * j / (ny - 1) * M_max;\r\n"
 
      ,"if (i == 0) {\r\n" +
 
        "    M[i][j].u = M_max;\r\n" +
 
        "    M[i][j].BC = true;\r\n" +
 
        "} else if (i == nx - 1) {\r\n" +
 
        "    M[i][j].u = M_min;\r\n" +
 
        "    M[i][j].BC = true;\r\n" +
 
        "}\r\n"
 
      ,"if (i == 0) {\r\n" +
 
        "    if ((j >= 35 && j <= ny)) M[i][j].u = M_max;\r\n" +
 
        "    else M[i][j].u = M_min;\r\n" +
 
        "    M[i][j].BC = true;\r\n" +
 
        "} else if (i == nx - 1) {\r\n" +
 
        "    if (Math.round(j - j % 10) % 8 == 0) M[i][j].u = M_min;\r\n" +
 
        "    else M[i][j].u = M_max;\r\n" +
 
        "M[i][j].BC = true;\r\n" +
 
        "}\r\n"
 
      ,"if (j >= 20 && j <= 29) {\r\n" +
 
        "    if (i == nx / 2 - 1) {\r\n" +
 
        "        M[i][j].u = M_max;\r\n" +
 
        "        M[i][j].BC = true;\r\n" +
 
        "    } else if (i == nx / 2) {\r\n" +
 
        "        M[i][j].u = M_min;\r\n" +
 
        "        M[i][j].BC = true;\r\n" +
 
        "    }\r\n" +
 
        "}\r\n"
 
      ,"if (j >= 24 && j <= 25 && (i == nx / 2 - 1 || i == nx / 2))\r\n" +
 
        "    add_BC2(function(t){return sin(t * 10) * 10;}, i, j);\r\n"
 
//      ,"        if (((i == 20 || i == 30) && j >= 40) || ((j == ny - 1 || j == 40) && i > 20 && i < 30)) {\r\n" +
 
//        "            M[i][j].u = 0;\r\n" +
 
//        "            M[i][j].BC = true;\r\n" +
 
//        "        }\r\n" +
 
//        "        //M[25][40].BC = false;\r\n" +
 
//        "        M[25][40].u = M_min;\r\n" +
 
//        "        if (i > 20 && i < 30 && j > 40 && j < 49) {\r\n" +
 
//        "            M[i][j].u = M_min;\r\n" +
 
//        "            M[i][j].BC = true;\r\n" +
 
//        "        }\r\n"
 
    ];
 
    function generate_function_buttons() {
 
        for (var i = 0; i < functions_for_buttons.length; i++) {
 
            var btn = document.createElement('input');
 
             btn.type = "button";
 
            btn.value = i + 1;
 
            btn.onclick = function(i) {
 
                return function() {
 
                IC_text.value =
 
//                    "for (var i = 0; i < nx; i++) {\r\n" +
 
//                    "    for (var j = 0; j < ny; j++) {\r\n" +
 
                        functions_for_buttons[i];// +
 
//                    "    }\r\n" +
 
//                   "}";
 
                    apply_IC();
 
                }
 
            }(i);
 
            generated_buttons_span.appendChild(btn);
 
        }
 
    }
 
    generate_function_buttons();
 
    IC_text.value = functions_for_buttons[0];
 
  
 +
            var width = 0.05;
 +
            var power = 15;
 +
            var minus = 0;
  
    // граничные условия
+
             T[i][j].u = Math.exp(-Math.pow(x - 0.5, 2) / width) * Math.exp(-Math.pow(y - 0.5, 2) / width) * power - minus;
    function BC_periodic() {
+
             T[i][j].v = 0;
        for (i = 1; i < Nx - 1; i++) {
 
             T[i][0] = T[i][Ny - 2];
 
            T[i][Ny - 1] = T[i][1];
 
        }
 
        for (j = 0; j < Ny; j++) {
 
            T[0][j] = T[Nx - 2][j];
 
             T[Nx - 1][j] = T[1][j];
 
 
         }
 
         }
 
     }
 
     }
    function BC_mirror() {
 
        for (i = 1; i < Nx - 1; i++) {
 
            T[i][0] = T[i][1];
 
            T[i][Ny - 1] = T[i][Ny - 2];
 
        }
 
        for (j = 0; j < Ny; j++) {
 
            T[0][j] = T[1][j];
 
            T[Nx - 1][j] = T[Nx - 2][j];
 
        }
 
    }
 
    BC_mirror();
 
  
     // дублирующий массив без ГУ и переменные, для внешнего интерфейса
+
     // периодические граничные условия
    var M = [];
+
     for (i = 1; i < Nx - 1; i++) {
     for (var i = 0; i < Nx - 2; i++) {
+
         T[i][0] = T[i][Ny - 2];
         M[i] = [];
+
        T[i][Ny - 1] = T[i][1];
        for (var j = 0; j < Ny - 2; j++) {
 
            M[i][j] = T[i + 1][j + 1];
 
        }
 
 
     }
 
     }
     var nx = Nx - 2;
+
     for (j = 0; j < Ny; j++) {
    var ny = Ny - 2;
+
        T[0][j] = T[Nx - 2][j];
 
+
        T[Nx - 1][j] = T[1][j];
    // массив для граничных условий Коши 2-го рода
 
    var BC2 = [];
 
    function add_BC2(func, i, j) {
 
        BC2.push({F:func, i:i, j:j});
 
 
     }
 
     }
  
     var color_N = 120;                          // цветов не больше, чем color_N, саму переменную color_N в расчетах лучше не использовать
+
     var color_N = 60;                          // цветов не больше, чем color_N, саму переменную color_N в расчетах лучше не использовать
 
     var colors = prepare_colors(color_N);
 
     var colors = prepare_colors(color_N);
 
     var cell_pics = prepare_cell_pics(colors);
 
     var cell_pics = prepare_cell_pics(colors);
Строка 301: Строка 151:
 
         else if (e.which == 2) T1 = 0;        // при нажатии средней клавиши мыши клетка нагревается
 
         else if (e.which == 2) T1 = 0;        // при нажатии средней клавиши мыши клетка нагревается
 
         else if (e.which == 3) T1 = T_min * 0.3;              // при нажатии правой клавиши мыши клетка остывает
 
         else if (e.which == 3) T1 = T_min * 0.3;              // при нажатии правой клавиши мыши клетка остывает
         else return false;
+
         else return;
  
 
         var area = (e.which != 2);
 
         var area = (e.which != 2);
Строка 320: Строка 170:
 
         // везде прибавляем 1 - из за периодических условий массив сдвинут на 1
 
         // везде прибавляем 1 - из за периодических условий массив сдвинут на 1
 
         if (!area) {
 
         if (!area) {
             if (!T[i][j].BC) {
+
             T[i][j].u = T1;
                T[i][j].u = T1;
+
            draw_cell(i, j);
                draw_cell(i, j);
 
            }
 
 
         }
 
         }
 
         else for (var shift_i = -3; shift_i <= 3; shift_i++) {
 
         else for (var shift_i = -3; shift_i <= 3; shift_i++) {
 
             var ii;
 
             var ii;
             if (i + shift_i < 1) {
+
             if (i + shift_i < 1) ii = i + shift_i + Nx - 2;
                if (!radio_BC_periodic.checked) continue;
+
             else if (i + shift_i > Nx - 2) ii = i + shift_i - Nx + 2;
                ii = i + shift_i + Nx - 2;
 
            }
 
             else if (i + shift_i > Nx - 2) {
 
                if (!radio_BC_periodic.checked) continue;
 
                ii = i + shift_i - Nx + 2;
 
            }
 
 
             else ii = shift_i + i;
 
             else ii = shift_i + i;
 
             for (var shift_j = -3; shift_j <= 3; shift_j++) {
 
             for (var shift_j = -3; shift_j <= 3; shift_j++) {
 
                 var jj;
 
                 var jj;
                 if (j + shift_j < 1) {
+
                 if (j + shift_j < 1) jj = j + shift_j + Ny - 2;
                    if (!radio_BC_periodic.checked) continue;
+
                 else if (j + shift_j > Ny - 2) jj = j + shift_j - Ny + 2;
                    jj = j + shift_j + Ny - 2;
 
                }
 
                 else if (j + shift_j > Ny - 2) {
 
                    if (!radio_BC_periodic.checked) continue;
 
                    jj = j + shift_j - Ny + 2;
 
                }
 
 
                 else jj = shift_j + j;
 
                 else jj = shift_j + j;
 
                if (T[ii][jj].BC) continue;
 
  
 
                 var r = Math.abs(shift_i) + Math.abs(shift_j);
 
                 var r = Math.abs(shift_i) + Math.abs(shift_j);
Строка 379: Строка 213:
 
             for (var i = 1; i < Nx - 1; i++) {
 
             for (var i = 1; i < Nx - 1; i++) {
 
                 for (var j = 1; j < Ny - 1; j++) {
 
                 for (var j = 1; j < Ny - 1; j++) {
                    if (T[i][j].BC) continue;
 
 
                     if (heat_equation) T[i][j].v = (T[i + 1][j].u + T[i][j + 1].u - 4 * T[i][j].u + T[i - 1][j].u + T[i][j - 1].u) * koeff1;
 
                     if (heat_equation) T[i][j].v = (T[i + 1][j].u + T[i][j + 1].u - 4 * T[i][j].u + T[i - 1][j].u + T[i][j - 1].u) * koeff1;
 
                     else T[i][j].v += ((T[i + 1][j].u + T[i][j + 1].u - 4 * T[i][j].u + T[i - 1][j].u + T[i][j - 1].u) * koeff1 - T[i][j].v * damping_power) * dt;
 
                     else T[i][j].v += ((T[i + 1][j].u + T[i][j + 1].u - 4 * T[i][j].u + T[i - 1][j].u + T[i][j - 1].u) * koeff1 - T[i][j].v * damping_power) * dt;
Строка 390: Строка 223:
 
                 }
 
                 }
 
             }
 
             }
            for (var i = 0; i < BC2.length; i++) {
 
                var f = BC2[i];
 
                M[f.i][f.j].u = f.F(t);
 
            }
 
            t += dt;
 
 
         }
 
         }
 
     }
 
     }
Строка 462: Строка 290:
  
 
}
 
}
</syntaxhighlight>
+
</source>
 
Файл '''"Wave_Heat_2D.html"'''
 
Файл '''"Wave_Heat_2D.html"'''
<syntaxhighlight lang="html5" line start="1" enclose="div">
 
 
<!DOCTYPE html>
 
<!DOCTYPE html>
 
<html>
 
<html>
Строка 475: Строка 302:
 
     <table align=center>
 
     <table align=center>
 
         <tr>
 
         <tr>
             <td><canvas id="Wave_Heat_2D_canvas" width="650" height="650" style="border:1px solid #000000; border-radius:6px; margin-bottom: -5px"></canvas><br>
+
             <td><canvas id="Wave_Heat_2D_canvas" width="700" height="700" style="border:1px solid #000000; border-radius:6px; margin-bottom: -5px"></canvas><br></td>
 
             <td style="font:bold 12px sans-serif; color:#003366; background-color: #bbbbdd; border-radius:10px; padding: 8px; padding-right: 12px; vertical-align:top">
 
             <td style="font:bold 12px sans-serif; color:#003366; background-color: #bbbbdd; border-radius:10px; padding: 8px; padding-right: 12px; vertical-align:top">
 
                 <div style="text-align: center; font: bold italic 20px Arial, 'Helvetica Neue', Helvetica, sans-serif;">Опции</div>
 
                 <div style="text-align: center; font: bold italic 20px Arial, 'Helvetica Neue', Helvetica, sans-serif;">Опции</div>
 
                 <hr>
 
                 <hr>
                 <input type="radio" id="radio_heat" name="eq_radio" /> Уравнение теплопроводности<br>
+
                 <input type="radio" id="redio_heat" name="My_radio" checked /> Уравнение теплопроводности<br>
                 <input type="radio" id="radio_wave" name="eq_radio" checked/> Волновое уравнение<br><br>
+
                 <input type="radio" id="redio_wave" name="My_radio" /> Волновое уравнение<br><br>
 
                 <span id="damping_span">Сила затухания:</span><br><input type="range" id="slider_damping_power" style="width: 150px;"><br><br>
 
                 <span id="damping_span">Сила затухания:</span><br><input type="range" id="slider_damping_power" style="width: 150px;"><br><br>
 
                 <input type="button" id="button_pause" value="Пауза/Старт"/><br>
 
                 <input type="button" id="button_pause" value="Пауза/Старт"/><br>
 
                 <input type="button" id="button_clear" value="Очистить"/><br><br>
 
                 <input type="button" id="button_clear" value="Очистить"/><br><br>
                <hr>
 
                <span style="color: #000000">Граничные условия:</span><br>
 
                <input type="radio" id="radio_BC_mirror" name="BC_radio" checked/>Зеркальные<br>
 
                <input type="radio" id="radio_BC_periodic" name="BC_radio" />Периодические<br>
 
            </td>
 
        </tr>
 
        <tr>
 
            <td colspan="2" style="font:bold 12px sans-serif; color:#333333; background-color: #cccccc; border-radius:10px; padding: 8px; padding-right: 12px; vertical-align:top">
 
                <div style=" padding-bottom: 6px">
 
                <abbr style="border-bottom: 1px dotted black;"
 
                      title="Сюда можно вписать код на языке JavaScript, который будет задавать двумерные ГУ системы.&#10;Задавать можно следующие значения:&#10;    M[i][j].u - температура/перемещение;&#10;    M[i][j].v - первая производная (имеет смысл задавать только для волнового уравнения).&#10;Также можно использовать следующие переменные:&#10;    nx, ny - количество частиц по горизонтали и по вертикали;&#10;    M_max, M_min - максимальное и минимальное значение, возможное в массиве (на эти значения настроен цветовой диапазон программы, значения, выходящие за пределы, могут отображаться некорректно).&#10;Превратить участок в ГУ можно с помощью M[i][j].BC = true;">Начальные условия:</abbr>
 
                </div>
 
                for (var i = 0; i < nx; i++) {<br>
 
                &nbsp;&nbsp;&nbsp;&nbsp;for (var j = 0; j < ny; j++) {
 
                <textarea id="IC_text" cols="40" rows="5" wrap=off style="width:95%; height:5.3em; resize: vertical;"></textarea><br>
 
                &nbsp;&nbsp;&nbsp;&nbsp;}<br>
 
                }<br>
 
                <input type="button" id="apply_IC_button" value="Применить" style="margin-top: 8px"/>
 
                <input type="button" id="clear_IC_window_button" value="Очистить поле для ввода"/><br><br>
 
                <span style="padding: 0 4px 0 0;">Примеры:</span><span id="generated_buttons_span"></span>
 
 
             </td>
 
             </td>
            <td></td>
 
 
         </tr>
 
         </tr>
 
         <tr><td colspan="2" style="font:italic bold 12px Georgia, sans-serif; color:#ffffff; background-color: #888888; border-radius:6px; padding: 8px;">
 
         <tr><td colspan="2" style="font:italic bold 12px Georgia, sans-serif; color:#ffffff; background-color: #888888; border-radius:6px; padding: 8px;">
Строка 512: Строка 318:
 
             <a href="http://tm.spbstu.ru/%D0%90.%D0%9C._%D0%9A%D1%80%D0%B8%D0%B2%D1%86%D0%BE%D0%B2">Anton Krivtsov</a>
 
             <a href="http://tm.spbstu.ru/%D0%90.%D0%9C._%D0%9A%D1%80%D0%B8%D0%B2%D1%86%D0%BE%D0%B2">Anton Krivtsov</a>
 
             &copy 2014
 
             &copy 2014
         </td></tr>
+
         </td><td></td></tr>
  
 
     </table>
 
     </table>
 
</body>
 
</body>
 
</html>
 
</html>
</syntaxhighlight>
+
</source>
</div>
+
</toggledisplay>
</div>
 
  
 
[[Category: Виртуальная лаборатория]]
 
[[Category: Виртуальная лаборатория]]
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)