Редактирование: Колебания с двумя степенями свободы
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 28: | Строка 28: | ||
var context1 = canvasBalls1.getContext("2d"); // на context1 происходит рисование | var context1 = canvasBalls1.getContext("2d"); // на context1 происходит рисование | ||
var context2 = canvasBalls2.getContext("2d"); // на context2 происходит рисование | var context2 = canvasBalls2.getContext("2d"); // на context2 происходит рисование | ||
+ | var c1 = 5; | ||
var Pi = 3.1415926; // число "пи" | var Pi = 3.1415926; // число "пи" | ||
var a0 = 1; // масштаб расстояния (диаметр шара) | var a0 = 1; // масштаб расстояния (диаметр шара) | ||
Строка 43: | Строка 44: | ||
var m = 1 * m0; // масса | var m = 1 * m0; // масса | ||
var g = 0.25 * g0; // ускорение свободного падения | var g = 0.25 * g0; // ускорение свободного падения | ||
− | var c = | + | var c = c1 * C0; // жесткость пружины |
− | var | + | var l0 = 6 * a0; // длина пружины |
+ | var L = l0 + m * g / c; // длина пружины под воздействием силы тяжести | ||
var time = 0; | var time = 0; | ||
− | Text_c.value = | + | Text_c.value = c1; |
Text_m.value = m; | Text_m.value = m; | ||
− | + | ||
− | |||
Slider_c.min = 1; | Slider_c.min = 1; | ||
− | Slider_c.max = | + | Slider_c.max = 10; |
Slider_c.step = 0.5; | Slider_c.step = 0.5; | ||
Slider_c.value = Text_c.value; | Slider_c.value = Text_c.value; | ||
Slider_m.min = 1; | Slider_m.min = 1; | ||
− | Slider_m.max = | + | Slider_m.max = 3; |
− | Slider_m.step = 0. | + | Slider_m.step = 0.1; |
Slider_m.value = Text_m.value; | Slider_m.value = Text_m.value; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
// *** Задание вычислительных параметров *** | // *** Задание вычислительных параметров *** | ||
Строка 83: | Строка 78: | ||
var b = []; | var b = []; | ||
− | b.x = w / 2; b.y = | + | b.x = w / 2; b.y = h * 0.7; // расчетные координаты шара |
b.vx = 0.5; b.vy = 0.5; // начальная скорость | b.vx = 0.5; b.vy = 0.5; // начальная скорость | ||
Строка 95: | Строка 90: | ||
function physics1() { // то, что происходит каждый шаг времени | function physics1() { // то, что происходит каждый шаг времени | ||
− | + | for (var s = 1; s <= spf; s++) { | |
− | + | b.vx += -g / L * (b.x - w/2) * dt; b.vy += -c / m * (b.y - h * 0.7) * dt; | |
− | + | b.x += b.vx * dt; b.y += b.vy * dt; | |
− | b.vx += - | + | } |
+ | } | ||
+ | |||
+ | /* function physics2() { // то, что происходит каждый шаг времени | ||
+ | for (var s = 1; s <= spf; s++) { | ||
+ | |||
+ | b.vx += -c * (Math.sqrt(Math.pow((L + b.y - h * 0.7),2) + Math.pow((b.x - w/2), 2) - l0)) * (b.x - w/2) / (Math.sqrt(Math.pow((L + b.y - h * 0.7),2) + Math.pow((b.x - w/2),2))) / m * dt; | ||
+ | b.vy += -c * (Math.sqrt(Math.pow((L + b.y - h * 0.7),2) + Math.pow((b.x - w/2), 2) - l0)) * (L + b.y - h * 0.7) / (Math.sqrt(Math.pow((L + b.y - h * 0.7),2) + Math.pow((b.x - w/2),2))) / m * dt; | ||
b.x += b.vx * dt; b.y += b.vy * dt; | b.x += b.vx * dt; b.y += b.vy * dt; | ||
} | } | ||
} | } | ||
− | + | */ | |
this.set_m = function(input) | this.set_m = function(input) | ||
{ | { | ||
m = Number(input); | m = Number(input); | ||
time = 0; | time = 0; | ||
− | b.x = w / 2; b.y = | + | b.x = w / 2; b.y = h * 0.7; |
b.vx = 0.5; b.vy = 0.5; | b.vx = 0.5; b.vy = 0.5; | ||
context.clearRect(0, 0, w * scale, h * scale); | context.clearRect(0, 0, w * scale, h * scale); | ||
Строка 114: | Строка 116: | ||
} | } | ||
+ | |||
this.set_c = function(input) | this.set_c = function(input) | ||
{ | { | ||
− | + | c1 = Number(input); | |
− | + | time = 0; | |
− | b.x = w / 2; b.y = | + | b.x = w / 2; b.y = h * 0.7; |
b.vx = 0.5; b.vy = 0.5; | b.vx = 0.5; b.vy = 0.5; | ||
context.clearRect(0, 0, w * scale, h* scale); | context.clearRect(0, 0, w * scale, h* scale); | ||
context1.clearRect(0, 0, w * scale, h * scale); | context1.clearRect(0, 0, w * scale, h * scale); | ||
context2.clearRect(0, 0, w * scale, h * scale); | context2.clearRect(0, 0, w * scale, h * scale); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
Строка 140: | Строка 132: | ||
context.fillStyle = "#ff0000"; | context.fillStyle = "#ff0000"; | ||
context.clearRect(0, 0, w * scale, h * scale); // очистить экран | context.clearRect(0, 0, w * scale, h * scale); // очистить экран | ||
− | + | context.beginPath(); | |
− | + | conte xt.arc(b.x * scale, b.y * scale, r * scale / 3, 0, 2 * Math.PI, false); //рисуем шар | |
− | |||
context.fill(); | context.fill(); | ||
context.closePath(); | context.closePath(); | ||
− | + | context.lineWidth="6"; | |
+ | context.strokeStyle="#990099"; | ||
+ | context.beginPath(); //рисуем пружину | ||
+ | context.moveTo(w/ 2 * scale, 0); | ||
+ | context.lineTo(b.x * scale, b.y * scale); | ||
+ | context.stroke(); | ||
context1.strokeStyle = "red"; //рисуем график 1 | context1.strokeStyle = "red"; //рисуем график 1 | ||
context1.beginPath(); | context1.beginPath(); | ||
− | context1.moveTo(time * Math.sqrt( | + | context1.moveTo(time * Math.sqrt(c / m) / 20 * scale, (b.x - h / 6) * scale); |
− | context1.lineTo((time + dt) * Math.sqrt( | + | context1.lineTo((time + dt) * Math.sqrt(c / m) / 20 * scale, (b.x - h / 6) * scale); |
context1.stroke(); | context1.stroke(); | ||
Строка 166: | Строка 162: | ||
context2.strokeStyle = "#3070d0"; //рисуем график 2 | context2.strokeStyle = "#3070d0"; //рисуем график 2 | ||
context2.beginPath(); | context2.beginPath(); | ||
− | context2.moveTo(time * Math.sqrt(c / m) | + | context2.moveTo(time * Math.sqrt(c / m) * scale, (b.y - h / 5) * scale); |
− | context2.lineTo((time + dt) * Math.sqrt(c / m) | + | context2.lineTo((time + dt) * Math.sqrt(c / m) * scale, (b.y - h / 5) * scale); |
context2.stroke(); | context2.stroke(); | ||
Строка 182: | Строка 178: | ||
time += dt; | time += dt; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
Строка 225: | Строка 205: | ||
</I></font> | </I></font> | ||
</div> | </div> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<!-- Жесткость--> | <!-- Жесткость--> | ||
<div> | <div> | ||
Строка 252: | Строка 220: | ||
<canvas id="canvasBalls1" width="800" height="600" style="border:1px solid #000000;"></canvas> | <canvas id="canvasBalls1" width="800" height="600" style="border:1px solid #000000;"></canvas> | ||
<div> | <div> | ||
− | <b>Зависимость координаты y от | + | <b>Зависимость координаты y от k1*t:</b> |
</div> | </div> | ||
<canvas id="canvasBalls2" width="800" height="600" style="border:1px solid #000000;"></canvas> | <canvas id="canvasBalls2" width="800" height="600" style="border:1px solid #000000;"></canvas> |