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

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
 
== Формулировка задачи ==
 
== Формулировка задачи ==
Задача 48.13
 
 
Составить уравнение движения маятника, состоящего из материальной точки массы m, подвешенной на нити, длина которой изменяется по закону l=l(t)
 
Составить уравнение движения маятника, состоящего из материальной точки массы m, подвешенной на нити, длина которой изменяется по закону l=l(t)
  
Строка 31: Строка 30:
 
<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>
  
 
Дифференцируя полученные выражения энергий и подставляя в уравнение Лагранжа результаты дифференцирования, получаем уравнение движения рассматриваемой системы:
 
Дифференцируя полученные выражения энергий и подставляя в уравнение Лагранжа результаты дифференцирования, получаем уравнение движения рассматриваемой системы:
Строка 46: Строка 45:
  
 
*stats.js
 
*stats.js
 
*OrbitControls.js
 
 
   
 
   
 
Положим, что длина нити l увеличивается линейно с коэффициентом удлинения с. Это предположение используется при построении модели, то есть рассматриваем частный случай  со следующим законом изменения длины нити:
 
Положим, что длина нити l увеличивается линейно с коэффициентом удлинения с. Это предположение используется при построении модели, то есть рассматриваем частный случай  со следующим законом изменения длины нити:
Строка 53: Строка 50:
 
*l(t)=l(0)+ct
 
*l(t)=l(0)+ct
  
==Демонстрация модели==
+
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Palchikovskaya_NA/Generalwork2.html |width=1200 |height=600}}
 
 
{{#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:

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