Редактирование: Нелинейные колебания груза с вынуждающей силой программа
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | + | <htmlet nocache="yes">Kiselev/Spring/Spring</htmlet> | |
− | + | Код программы: | |
− | + | window.addEventListener("load", Main_Spring, true); | |
− | + | function Main_Spring() { | |
− | |||
− | |||
− | |||
− | |||
var canvas = spring_canvas; | var canvas = spring_canvas; | ||
canvas.onselectstart = function () {return false;}; // запрет выделения canvas | canvas.onselectstart = function () {return false;}; // запрет выделения canvas | ||
Строка 14: | Строка 10: | ||
var w = canvas.width; // ширина окна в расчетных координатах | var w = canvas.width; // ширина окна в расчетных координатах | ||
var h = canvas.height; // высота окна в расчетных координатах | var h = canvas.height; // высота окна в расчетных координатах | ||
− | var Pi = 3.1415926; | + | var Pi = 3.1415926; // число "пи" |
− | var m0 = 1; | + | var m0 = 1; // масштаб массы |
− | var T0 = 1; | + | var T0 = 1; // масштаб времени (период колебаний исходной системы) |
− | + | var t = 0; | |
− | var k0 = 2 * Pi / T0; | + | var k0 = 2 * Pi / T0; // масштаб частоты |
− | var C0 = m0 * k0 * k0; | + | var C0 = m0 * k0 * k0; // масштаб жесткости |
− | var B0 = 2 * m0 * k0; | + | var B0 = 2 * m0 * k0; // масштаб вязкости |
− | + | var omega = 10; | |
− | |||
// *** Задание физических параметров *** | // *** Задание физических параметров *** | ||
− | + | var F = 80; | |
− | var m = 1 * m0; | + | var m = 1 * m0; // масса |
− | var C = 1 * C0; | + | var C = 1 * C0; // жесткость |
− | var C1 = 1 * C0; | + | var C1 = 1 * C0; // жесткость1 |
− | + | var B = .1 * B0; // вязкость | |
− | |||
slider_m.value = (m / m0).toFixed(1); number_m.value = (m / m0).toFixed(1); | slider_m.value = (m / m0).toFixed(1); number_m.value = (m / m0).toFixed(1); | ||
slider_C.value = (C / C0).toFixed(1); number_C.value = (C / C0).toFixed(1); | slider_C.value = (C / C0).toFixed(1); number_C.value = (C / C0).toFixed(1); | ||
− | + | slider_C1.value = (C / C0).toFixed(1); number_C1.value = (C / C0).toFixed(1); | |
slider_B.value = (B / B0).toFixed(1); number_B.value = (B / B0).toFixed(1); | slider_B.value = (B / B0).toFixed(1); number_B.value = (B / B0).toFixed(1); | ||
− | + | slider_F.value = (F / 40).toFixed(1); number_F.value = (F / 40).toFixed(1); | |
// *** Задание вычислительных параметров *** | // *** Задание вычислительных параметров *** | ||
− | var fps = 300; | + | var fps = 300; // frames per second - число кадров в секунду (качечтво отображения) |
− | var spf = 100; | + | var spf = 100; // steps per frame - число шагов интегрирования между кадрами (edtkbxbdftn скорость расчета) |
− | var dt = 0.05 * T0 / fps; | + | var dt = 0.05 * T0 / fps; // шаг интегрирования (качество расчета) |
− | var steps = 0; | + | var steps = 0; // количество шагов интегрирования |
function setM(new_m) {m = new_m * m0;} | function setM(new_m) {m = new_m * m0;} | ||
function setC(new_C) {C = new_C * C0;} | function setC(new_C) {C = new_C * C0;} | ||
− | + | function setC1(new_C1) {C1 = new_C1 * C0 * 0.067;} | |
function setB(new_B) {B = new_B * B0;} | function setB(new_B) {B = new_B * B0;} | ||
− | + | function setF(new_F) {F = new_F * 40;} | |
slider_m.oninput = function() {number_m.value = slider_m.value; setM(slider_m.value);}; | slider_m.oninput = function() {number_m.value = slider_m.value; setM(slider_m.value);}; | ||
Строка 53: | Строка 47: | ||
slider_C.oninput = function() {number_C.value = slider_C.value; setC(slider_C.value);}; | slider_C.oninput = function() {number_C.value = slider_C.value; setC(slider_C.value);}; | ||
number_C.oninput = function() {slider_C.value = number_C.value; setC(number_C.value);}; | number_C.oninput = function() {slider_C.value = number_C.value; setC(number_C.value);}; | ||
− | + | slider_C1.oninput = function() {number_C1.value = slider_C1.value; setC1(slider_C1.value);}; | |
number_C1.oninput = function() {slider_C1.value = number_C1.value; setC1(number_C1.value);}; | number_C1.oninput = function() {slider_C1.value = number_C1.value; setC1(number_C1.value);}; | ||
slider_B.oninput = function() {number_B.value = slider_B.value; setB(slider_B.value);}; | slider_B.oninput = function() {number_B.value = slider_B.value; setB(slider_B.value);}; | ||
number_B.oninput = function() {slider_B.value = number_B.value; setB(number_B.value);}; | number_B.oninput = function() {slider_B.value = number_B.value; setB(number_B.value);}; | ||
− | + | slider_F.oninput = function() {number_F.value = slider_F.value; setF(slider_F.value);}; | |
number_F.oninput = function() {slider_F.value = number_F.value; setF(number_F.value);}; | number_F.oninput = function() {slider_F.value = number_F.value; setF(number_F.value);}; | ||
− | var count = true; | + | var count = true; // проводить ли расчет системы |
var v = 0; // скорость тела | var v = 0; // скорость тела | ||
− | var rw = canvas.width / 30; | + | var rw = canvas.width / 30; var rh = canvas.height / 1.5; |
− | + | var x0 = 15 * rw - rw / 2; var y0 = rh / 1.33 - rh / 2; | |
− | var x0 = 15 * rw - rw / 2; | ||
− | |||
// параметры пружины | // параметры пружины |