Редактирование: Система блоков (38.31)

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
 
'''Задача 38.31 из сборника задач Мещерского'''
 
'''Задача 38.31 из сборника задач Мещерского'''
 
'''''Задача:''''' С помощью языка программирования JavaScript смоделировать систему блоков с грузом. Построить график зависимости скорости от прошедшего времени.
 
'''''Задача:''''' С помощью языка программирования JavaScript смоделировать систему блоков с грузом. Построить график зависимости скорости от прошедшего времени.
[[File:Mesher.png|150px|thumb|Система блоков с грузами (A - груз 1, B - груз 2, C - подвижный блок, D - неподвижный блок.)]]
+
[[Файл:mesher.jpg|thumb|Система блоков с грузом (1 - подвижный блок, 2 - неподвижный блок, 3 - груз.)]]
== Реализация при помощи JS ==
+
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Drepin/mesherskiy/38.31.html|width=940 |height=400 |border=0 }}
+
== Решение ==
Программа: [http://tm.spbstu.ru/htmlets/Drepin/mesherskiy/Mesherskiy3831.zip Скачать]
+
 
 +
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/drepin/ |width=800 |height=600 |border=0 }}
 +
 
 +
Программа: [[Медиа: Blocks.zip|скачать]]
  
 
<div class="mw-collapsible mw-collapsed">
 
<div class="mw-collapsible mw-collapsed">
 
'''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content">
 
'''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content">
Файл '''"twoblocks.js"'''
+
Файл '''"5.js"'''
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
function init() {
 
function init() {
const g=9.8;
+
const g=1/2;
 
var ctxp = canvas_plot.getContext("2d");
 
var ctxp = canvas_plot.getContext("2d");
 
var wp = canvas_plot.width;
 
var wp = canvas_plot.width;
Строка 41: Строка 44:
 
webGLRenderer.shadowMapEnabled = true;
 
webGLRenderer.shadowMapEnabled = true;
 
// create the ground plane
 
// create the ground plane
var textureGrass = THREE.ImageUtils.loadTexture("grasslight-big.jpg");
+
var textureGrass = THREE.ImageUtils.loadTexture("../assets/textures/ground/grasslight-big.jpg");
 
textureGrass.wrapS = THREE.RepeatWrapping;
 
textureGrass.wrapS = THREE.RepeatWrapping;
 
         textureGrass.wrapT = THREE.RepeatWrapping;
 
         textureGrass.wrapT = THREE.RepeatWrapping;
Строка 135: Строка 138:
 
document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);
 
document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);
 
var controls = new function () {
 
var controls = new function () {
this.bricks = 25;
+
this.КИРПИЧИ = 25;
this.blocks = 1;
+
this.БЛОКИ = 1;
this.wood = 1;
+
this.ДЕРЕВО = 1;
this.spin = false;
+
this.ВРАЩЕНИЕ = false;
 
             this.redraw = function () {
 
             this.redraw = function () {
M1=controls.bricks;
+
M1=controls.КИРПИЧИ;
M2=controls.blocks;
+
M2=controls.БЛОКИ;
M3=controls.wood;
+
M3=controls.ДЕРЕВО;
moving=controls.spin;
+
moving=controls.ВРАЩЕНИЕ;
 
             };
 
             };
 
         };
 
         };
  
 
         var gui = new dat.GUI();
 
         var gui = new dat.GUI();
gui.add(controls, 'bricks', 1, 50).onChange(controls.redraw);
+
gui.add(controls, 'КИРПИЧИ', 1, 50).onChange(controls.redraw);
gui.add(controls, 'blocks', 1, 50).onChange(controls.redraw);
+
gui.add(controls, 'БЛОКИ', 1, 50).onChange(controls.redraw);
gui.add(controls, 'wood', 1, 50).onChange(controls.redraw);
+
gui.add(controls, 'ДЕРЕВО', 1, 50).onChange(controls.redraw);
         gui.add(controls, 'spin', 0, 1).onChange(controls.redraw);
+
         gui.add(controls, 'ВРАЩЕНИЕ', 0, 1).onChange(controls.redraw);
 
gui.domElement.style.position = 'absolute';
 
gui.domElement.style.position = 'absolute';
 
         gui.domElement.style.left = '0px';
 
         gui.domElement.style.left = '0px';
 
document.getElementsByClassName('dg main a')[0].style.height= '400px' ;
 
document.getElementsByClassName('dg main a')[0].style.height= '400px' ;
 +
document.getElementsByClassName('dg main a')[0].style.top= '400px' ;
 +
        //controls.redraw();
 +
 
var trackballControls = new THREE.TrackballControls(camera, webGLRenderer.domElement);
 
var trackballControls = new THREE.TrackballControls(camera, webGLRenderer.domElement);
 
trackballControls.rotateSpeed = 1.0;
 
trackballControls.rotateSpeed = 1.0;
Строка 162: Строка 168:
 
         render();
 
         render();
 
function createMesh(geom, imageFile) {
 
function createMesh(geom, imageFile) {
var texture = THREE.ImageUtils.loadTexture(imageFile);
+
var texture = THREE.ImageUtils.loadTexture("../assets/textures/general/" + imageFile);
 
var mat = new THREE.MeshPhongMaterial();
 
var mat = new THREE.MeshPhongMaterial();
 
if(geom.type=='PlaneGeometry') mat.side = THREE.DoubleSide;
 
if(geom.type=='PlaneGeometry') mat.side = THREE.DoubleSide;
Строка 172: Строка 178:
 
scene.remove(line);
 
scene.remove(line);
 
t+=1/60;
 
t+=1/60;
if((2*M1-M2-M3)!=0)Y=t*t*(2*g*(2*M1-M2-M3))/(8*M1+2*M2+7*M3);
+
Y=t*t*(2*g*(2*M1-M2-M3)/(8*M1+2*M2+7*M3));
if(Y>0) X=(-1)*Y*((cylinder1.position.x-2.5-plane1.position.x)/Math.sqrt(Math.pow((plane1.position.x-cylinder1.position.x-2.5),2)+Math.pow((plane1.position.y-Y/2),2)));
+
X=2*(-1)*Math.sqrt(2*g*Y*(2*M1-M2-M3)/(8*M1+2*M2+7*M3))*((cylinder1.position.x-2.5-plane1.position.x)/Math.sqrt(Math.pow((plane1.position.x-cylinder1.position.x-2.5),2)+Math.pow((plane1.position.y-Y/2),2)));
 
 
 
cylinder2.rotation.y =-Y/5;
 
cylinder2.rotation.y =-Y/5;
Строка 264: Строка 270:
 
// Align top-left
 
// Align top-left
 
stats.domElement.style.position = 'absolute';
 
stats.domElement.style.position = 'absolute';
stats.domElement.style.right = '0px';
+
stats.domElement.style.left = '0px';
 
stats.domElement.style.top = '0px';
 
stats.domElement.style.top = '0px';
 
document.getElementById("Stats-output").appendChild(stats.domElement);
 
document.getElementById("Stats-output").appendChild(stats.domElement);
Строка 279: Строка 285:
 
*stats.js
 
*stats.js
 
*dat.gui.js
 
*dat.gui.js
 +
*chroma.js
 
*TrackballControls.js
 
*TrackballControls.js
  
 
== Возможности программы ==
 
== Возможности программы ==
  
*Изменение положения камеры и включение движения вокруг системы
 
*Интерактивное представление скорости в виде графика
 
*Изменение масс грузов
 
  
 
== Решение частного случая ==
 
== Решение частного случая ==
  
 
'''''Условия задачи:'''''  
 
'''''Условия задачи:'''''  
[[File:Mesher.png|thumb|right|Картинка к задаче.]]
+
[[Файл:mesher.jpg|thumb|Картинка к задаче.]]
Груз <math>A</math> массы <math>M_{1}</math>, опускаясь вниз, при помощи троса, перекинутого через неподвижный блок <math>D</math>, поднимает вверх груз <math>B</math> массы <math>M_{2}</math>, прикрепленный к оси подвижного блока <math>C</math>. Блоки <math>C</math> и <math>D</math> считать однородными сплошными дисками массы <math>M_{3}</math> каждый. Определить скорость груза <math>A</math> в момент, когда он опустится на высоту <math>h</math>. Массой троса, проскальзыванием по ободам блоков и силами сопротивления пренебречь. В начальный момент система находилась в покое.
+
Груз A массы M1, опускаясь вниз, при помощи троса, перекинутого через неподвижный блок D, поднимает вверх груз B массы M2, прикрепленный к оси подвижного блока C. Блоки C и D считать однородными сплошными дисками массы M3 каждый. Определить скорость груза A в момент, когда он опустится на высоту h. Массой троса, проскальзыванием по ободам блоков и силами сопротивления пренебречь. В начальный момент система находилась в покое.
  
 
'''''Решение:'''''
 
'''''Решение:'''''
В исходной задаче требуется получить зависимость скорости от координаты. Мы же помимо этого хотим получить уравнение движения <math>h(t)</math>.
 
 
В основе решения лежит теорема об изменении кинетической энергии материальной системы:
 
<math>{ \Delta}Т=\sum\limits_{i = 1}^n A_{i}</math>
 
Изменение кинетической энергии системы - энергия, которую система обрела в конечный момент времени, тогда:
 
<math>{ \Delta}Т=T_{h}=\frac{M_{1}*V_{1}^2}{2}+\frac{I_{D}*ω_{D}^2}{2}+\frac{M_{3}*V^2}{2*4}+\frac{I_{C}*ω_{C}^2}{2}+\frac{M_{2}*V^2}{2*4}</math>
 
<math>{ \Delta}Т=\frac{M_{1}*V_{1}^2}{2}+\frac{M_{3}*V^2}{4}+\frac{3M_{3}*V^2}{16}+\frac{M_{2}*V^2}{8}=\frac{8M_{1}+2M_{1}+7M_{3}}{16}*V_{1}^2
 
</math>
 
 
Суммарная работа сил тяжести равна:
 
 
<math>A=A_{A}+A_{B}+A_{C}+A_{D}=M_{1}gh+0-(M_{3}+M_{2})g\frac{h}{2}=\frac{1}{2}gh(2M_{1}-M_{2}-M_{3})</math>
 
 
Получаем:
 
 
<math>\frac{8M_{1}+2M_{1}+7M_{3}}{16}*V_{1}^2=\frac{1}{2}gh(2M_{1}-M_{2}-M_{3})</math>, откуда
 
 
<math>V=2 \sqrt{2gh \frac{2M_{1}-M_{2}-M_{3}}{8M_{1}+2M_{1}+7M_{3}}}</math>.
 
 
Если вспомнить, что <math>V=\dot{h}</math>, то
 
<math>\dot{h}=2 \sqrt{2gh \frac{2M_{1}-M_{2}-M_{3}}{8M_{1}+2M_{1}+7M_{3}}}</math>, интегрируя, получаем:
 
 
<math>\sqrt{h}=\sqrt{2g \frac{2M_{1}-M_{2}-M_{3}}{8M_{1}+2M_{1}+7M_{3}}}t</math>,
 
  
<math>h=\frac{2g(2M_{1}-M_{2}-M_{3})}{8M_{1}+2M_{1}+7M_{3}}t^2</math>.
 
  
 
== См. также ==
 
== См. также ==
Вам запрещено изменять защиту статьи. 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:

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