Редактирование: КП: Параметрические колебания
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 44: | Строка 44: | ||
== Визуализация задачи== | == Визуализация задачи== | ||
+ | Примечание: менять частоту колебаний лучше в центральном положении. | ||
− | '' | + | {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Filimonov/dl_example_Swing.html |width=830 |height=630 |border=0 }} |
+ | <div class="mw-collapsible mw-collapsed"> | ||
+ | '''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content"> | ||
+ | Файл '''"dl_example_Swing.js"''' | ||
+ | <syntaxhighlight lang="javascript" line start="1" enclose="div"> | ||
+ | function main_dl_example_Swing() { | ||
+ | |||
+ | number_input.oninput = function() { | ||
+ | slider_input.value = number_input.value; | ||
+ | mult2(); | ||
+ | }; | ||
+ | slider_input.oninput = function() { | ||
+ | number_input.value = slider_input.value; | ||
+ | mult2(); | ||
+ | }; | ||
+ | |||
+ | function mult2() { | ||
+ | span_result.innerHTML = Math.PI / number_input.value; | ||
+ | } | ||
+ | |||
+ | var ctx = canvas_Swing.getContext("2d"); | ||
+ | var width = canvas_Swing.width; | ||
+ | var height = canvas_Swing.height; | ||
+ | |||
+ | var string_s_x = 400; | ||
+ | var string_s_y = 10; | ||
+ | var string_e_x = 400; | ||
+ | var string_e_y = 300; | ||
+ | var phi = Math.PI / 2; | ||
+ | //var n = 6; | ||
+ | var phi_max = Math.PI / number_input.value; | ||
+ | var h = 20; | ||
+ | var m = 10; | ||
+ | var string_length = 290; | ||
+ | var direction = 1; | ||
+ | var speed = 1; | ||
+ | |||
+ | var board_s_x = string_s_x - 50; | ||
+ | var board_s_y = string_e_y; | ||
+ | var board_e_x = string_e_x + 50; | ||
+ | var board_e_y = string_e_y; | ||
+ | |||
+ | var head_x = string_e_x + 15; | ||
+ | var head_y = string_e_y - 50; | ||
+ | var head_r = 10; | ||
+ | |||
+ | var eye_left_x = head_x - 2; | ||
+ | var eye_left_y = head_y - 2; | ||
+ | var eye_right_x = head_x + 2; | ||
+ | var eye_right_y = head_y - 2; | ||
+ | |||
+ | var body_s_x = head_x + 4; | ||
+ | var body_s_y = head_y + head_r; | ||
+ | var body_e_x = body_s_x + 12; | ||
+ | var body_e_y = body_s_y + 25; | ||
+ | |||
+ | var legs_s_x = body_e_x; | ||
+ | var legs_s_y = body_e_y; | ||
+ | var legs_e_x = body_e_x - 20; | ||
+ | var legs_e_y = board_e_y + 10; | ||
+ | |||
+ | var arms_s_x = body_e_x - 5; | ||
+ | var arms_s_y = body_e_y - 8; | ||
+ | var arms_e_x = body_e_x - 25; | ||
+ | var arms_e_y = body_e_y - 15; | ||
+ | |||
+ | function step() { | ||
+ | tick(); | ||
+ | draw(); | ||
+ | } | ||
+ | |||
+ | function tick() { | ||
+ | phi_max = Math.PI / number_input.value; | ||
+ | |||
+ | string_e_x = string_s_x + string_length * Math.cos(phi); | ||
+ | string_e_y = string_s_y + string_length * Math.sin(phi); | ||
+ | |||
+ | speed = 0.017 * Math.sqrt((Math.cos(phi - Math.PI / 2) - Math.cos(phi_max + 0.01))); | ||
+ | phi = phi + direction * speed; | ||
+ | |||
+ | if (phi > Math.PI / 2 + phi_max) direction = - direction; | ||
+ | if (phi < Math.PI / 2 - phi_max) direction = - direction; | ||
+ | |||
+ | board_s_x = string_s_x - 50; | ||
+ | board_s_y = string_e_y; | ||
+ | board_e_x = string_e_x + 50; | ||
+ | board_e_y = string_e_y; | ||
+ | |||
+ | head_x = string_e_x + 15; | ||
+ | head_y = string_e_y - 50; | ||
+ | head_r = 10; | ||
+ | |||
+ | eye_left_x = head_x - 2; | ||
+ | eye_left_y = head_y - 2; | ||
+ | eye_right_x = head_x + 2; | ||
+ | eye_right_y = head_y - 2; | ||
+ | |||
+ | body_s_x = head_x + 4; | ||
+ | body_s_y = head_y + head_r; | ||
+ | body_e_x = body_s_x + 12; | ||
+ | body_e_y = body_s_y + 25; | ||
+ | |||
+ | legs_s_x = body_e_x; | ||
+ | legs_s_y = body_e_y; | ||
+ | legs_e_x = body_e_x - 20; | ||
+ | legs_e_y = board_e_y + 10; | ||
+ | |||
+ | arms_s_x = body_e_x - 5; | ||
+ | arms_s_y = body_e_y - 8; | ||
+ | arms_e_x = body_e_x - 25; | ||
+ | arms_e_y = body_e_y - 15; | ||
+ | |||
+ | } | ||
+ | |||
+ | function draw() { | ||
+ | ctx.clearRect(0, 0, width, height); | ||
+ | ctx.beginPath(); | ||
+ | |||
+ | ctx.lineWidth="1"; | ||
+ | ctx.strokeStyle="#080101"; | ||
+ | |||
+ | ctx.moveTo(string_s_x, string_s_y); | ||
+ | ctx.lineTo(string_e_x, string_e_y); | ||
+ | ctx.stroke(); | ||
+ | |||
+ | ctx.lineWidth="2"; | ||
+ | ctx.strokeStyle="#DED5D5"; | ||
+ | ctx.beginPath(); | ||
+ | ctx.arc(head_x, head_y, head_r, 0, 2 * Math.PI); | ||
+ | ctx.stroke(); | ||
+ | |||
+ | ctx.fillStyle="#080101"; | ||
+ | ctx.beginPath(); | ||
+ | ctx.arc(eye_left_x, eye_left_y, 1, 0, 2 * Math.PI); | ||
+ | ctx.arc(eye_right_x, eye_right_y, 1, 0, 2 * Math.PI); | ||
+ | ctx.fill(); | ||
+ | |||
+ | ctx.beginPath(); | ||
+ | ctx.strokeStyle="#DED5D5"; | ||
+ | ctx.moveTo(body_s_x, body_s_y); | ||
+ | ctx.lineTo(body_e_x, body_e_y); | ||
+ | ctx.lineWidth="6"; | ||
+ | ctx.stroke(); | ||
+ | |||
+ | ctx.beginPath(); | ||
+ | ctx.strokeStyle="#DED5D5"; | ||
+ | ctx.moveTo(legs_s_x, legs_s_y); | ||
+ | ctx.lineTo(legs_e_x, legs_e_y); | ||
+ | ctx.lineWidth="6"; | ||
+ | ctx.stroke(); | ||
+ | |||
+ | ctx.beginPath(); | ||
+ | ctx.strokeStyle="#DED5D5"; | ||
+ | ctx.moveTo(arms_s_x, arms_s_y); | ||
+ | ctx.lineTo(arms_e_x, arms_e_y); | ||
+ | ctx.lineWidth="6"; | ||
+ | ctx.stroke(); | ||
+ | |||
+ | ctx.fillStyle="#F31C1C"; | ||
+ | ctx.beginPath(); | ||
+ | ctx.arc(string_e_x, string_e_y, head_r, 0, 2 * Math.PI); | ||
+ | ctx.fill(); | ||
+ | |||
+ | ctx.lineWidth="2"; | ||
+ | ctx.strokeStyle="#080101"; | ||
+ | ctx.beginPath(); | ||
+ | ctx.arc(string_e_x, string_e_y, head_r, 0, 2 * Math.PI); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | |||
+ | setInterval(step, 1000 / 60); | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
− | { | + | Файл '''"dl_example_Swing.html"''' |
+ | <syntaxhighlight lang="javascript" line start="1" enclose="div"> | ||
+ | <!DOCTYPE html> | ||
+ | <html> | ||
+ | <head> | ||
+ | <title>SWING</title> | ||
+ | <script src="dl_example_Swing.js"> | ||
+ | function sizePic() { | ||
+ | number_input = document.getElementById("number_input").value; | ||
+ | |||
+ | } | ||
+ | </script> | ||
+ | </head> | ||
+ | <body onload="main_dl_example_Swing();"> | ||
+ | <canvas id="canvas_Swing" width="800" height="450" style="border: 1px solid #000000"></canvas> | ||
+ | <input type="range" id="slider_input" min=3 max=9 value=3 step=0.01 style="width: 150px;"> | ||
+ | <div> Частота: PI : <input type="number" id="number_input" oninput ="n" min=3 max=9 value=3 step=0.01 style="width: 50px;"> | ||
+ | = <span id="span_result">1.0471975511965976</span> </div> | ||
+ | </body> | ||
+ | </html> | ||
+ | |||
+ | == Обсуждение результатов и выводы == | ||
+ | |||
+ | |||
+ | |||
+ | == Ссылки по теме == |