Редактирование: Маятник с растяжимой нитью

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
 
== Формулировка задачи ==
 
== Формулировка задачи ==
Задача 48.13
+
Составить уравнение движения маятника, состоящего из материальной точки массы m, подвешенной на нити, длина которой изменяется по закону      
Составить уравнение движения маятника, состоящего из материальной точки массы m, подвешенной на нити, длина которой изменяется по закону l=l(t)
+
<math>l=l_0+ct</math>
  
 
==Решение==
 
==Решение==
Строка 31: Строка 31:
 
<math>T = \frac{1}{2}\ m\ (\dot l\ ^{2}+l^{2}\dot\varphi^{2})</math>
 
<math>T = \frac{1}{2}\ m\ (\dot l\ ^{2}+l^{2}\dot\varphi^{2})</math>
  
<math>\Pi = - m \ g\ l \cos(\varphi )\ </math>
+
<math>\Pi = m \ g\ l \cos(\varphi )\ </math>
 
 
 
Дифференцируя полученные выражения энергий и подставляя в уравнение Лагранжа результаты дифференцирования, получаем уравнение движения рассматриваемой системы:
 
Дифференцируя полученные выражения энергий и подставляя в уравнение Лагранжа результаты дифференцирования, получаем уравнение движения рассматриваемой системы:
  
 
<math>\ddot\varphi + 2\frac{\dot l}{l}\dot\varphi + \frac{g}{l} \sin(\varphi) = 0 </math>
 
<math>\ddot\varphi + 2\frac{\dot l}{l}\dot\varphi + \frac{g}{l} \sin(\varphi) = 0 </math>
 
==Визуализация процесса==
 
 
Для моделирования колебаний данного маятника используется язык программирования JavaScript и следующие библиотеки:
 
 
*three.js
 
 
*dat.gui.js
 
 
*stats.js
 
 
*OrbitControls.js
 
 
Положим, что длина нити l увеличивается линейно с коэффициентом удлинения с. Это предположение используется при построении модели, то есть рассматриваем частный случай  со следующим законом изменения длины нити:
 
 
*l(t)=l(0)+ct
 
 
==Демонстрация модели==
 
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Palchikovskaya_NA/Generalwork2.html |width=600 |height=450}}
 
 
<div class="mw-collapsible mw-collapsed">
 
'''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content">
 
Файл '''"Generalwork2.js"'''
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
 
function init()
 
{
 
var stats=initStats();
 
var scene=new THREE.Scene();
 
var camera=new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,1000);
 
var renderer=new THREE.WebGLRenderer();
 
renderer.setClearColor(new THREE.Color(0xABB1E0,1.0));
 
renderer.setSize(window.innerWidth, window.innerHeight);
 
renderer.shadowMapEnabled=true;
 
 
var planeGeometry=new THREE.PlaneGeometry(60,20,1,1);
 
var planeMaterial=new THREE.MeshLambertMaterial({color:0x0ffd5});
 
var plane=new THREE.Mesh(planeGeometry,planeMaterial);
 
plane.receiveShadow=true;
 
plane.rotation.x=-Math.PI/2;
 
plane.position.set(0,0,0);
 
scene.add(plane);
 
 
camera.position.set(0,5,50);
 
camera.lookAt(new THREE.Vector3(0,-10,0));
 
 
 
  OrbitControls= new THREE.OrbitControls(camera);
 
  OrbitControls.autoRotate = true;
 
  var clock = new THREE.Clock();
 
 
var ambientLight=new THREE.AmbientLight(0x0c0c0c);
 
scene.add(ambientLight);
 
var spotLight=new THREE.SpotLight(0xffffff);
 
spotLight.castShadow = true;
 
spotLight.position.set(-40,60,-10);
 
scene.add(spotLight);
 
 
document.getElementById("WebGL-output").appendChild(renderer.domElement);
 
 
group=new THREE.Object3D();
 
function draw()
 
{
 
scene.remove(group)
 
L0=20;
 
c=controls.c;
 
L=L0+c*time;
 
group=new THREE.Object3D();
 
var cylinderGeometry=new THREE.CylinderGeometry(0.15,0.15,L);
 
var cylinderMaterial=new THREE.MeshLambertMaterial({color: 0x7777ff});
 
var cylinder=new THREE.Mesh(cylinderGeometry,cylinderMaterial);
 
var sphereGeometry=new THREE.SphereGeometry(1,20,20);
 
var sphereMaterial=new THREE.MeshLambertMaterial({color: 0x7777ff});
 
var sphere=new THREE.Mesh(sphereGeometry,sphereMaterial);
 
sphere.castShadow=true;
 
cylinder.position.set(0,-L/2,0);
 
sphere.position.set(0,-L,0);
 
group.add(cylinder);
 
group.add(sphere);
 
group.position.set(0,0,0);
 
scene.add(group);
 
}
 
 
var omega,phi,c,time,dt;
 
var controls = new function ()
 
{
 
this.c=0.1;
 
this.redraw=function()
 
{
 
dt=0.005;
 
time=0;
 
omega=0;
 
phi=Math.PI/3;
 
c=controls.c;
 
group.rotation.z=phi;
 
}
 
this.L=20+this.c*time;
 
 
}
 
 
var controls1=new function()
 
{
 
this.L='0';
 
}
 
 
 
var gui = new dat.GUI();
 
gui.add(controls,'c',0.01,0.2);
 
gui.add(controls1,'L').listen();
 
gui.add(controls,'redraw');
 
 
 
controls.redraw();
 
render();
 
function render()
 
{
 
stats.update();
 
time+=dt;
 
draw();
 
 
omega=omega-((9.8*Math.sin(phi)+2*c*omega)/(L0+c*time))*dt;
 
phi+=omega;
 
controls1.L=L0+c*time;
 
group.rotation.z=phi;
 
     
 
      var delta = clock.getDelta();
 
      orbitControls.update(delta);
 
     
 
renderer.render(scene,camera);
 
requestAnimationFrame(render);
 
 
}
 
function initStats()
 
{
 
var stats = new Stats();
 
stats.setMode(0);
 
stats.domElement.style.position = 'absolute';
 
stats.domElement.style.left = '0px';
 
stats.domElement.style.top = '0px';
 
document.getElementById("Stats-output").appendChild(stats.domElement);
 
return stats;
 
}
 
}
 
window.onload = init;
 
</syntaxhighlight>
 
</div>
 
Вам запрещено изменять защиту статьи. 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:

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