Цилиндр и наклонная плоскость (48.29) — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
(Условие)
Строка 2: Строка 2:
 
==Условие==
 
==Условие==
 
На гладкой горизонтальной плоскости помещена треугольная призма ABC массы m, которая может скользить без трения по этой плоскости; по грани призмы AB катится без скольжения однородный круглый цилиндр массы m1. Определить ускорение призмы.
 
На гладкой горизонтальной плоскости помещена треугольная призма ABC массы m, которая может скользить без трения по этой плоскости; по грани призмы AB катится без скольжения однородный круглый цилиндр массы m1. Определить ускорение призмы.
 +
==Решение задачи==
 +
Используем уравнение Лагранжа 2-го рода:
 +
 +
<math>\frac{d}{dt}\left(\frac{\partial L}{\partial\dot q_i}\right) - \frac{\partial L}{\partial q_i} = 0  ,  (i = 1,2)</math> , где
 +
L = T - П - функция Лагранжа
 +
T - кинетическая энергия системы
 +
П - потенциальная энергия системы
 +
q - независимые обобщенные координаты
 +
 +
В данной задаче в качестве обобщенных координат примем изменяющиеся координату призмы x и координату цилиндра c по оси, направленной вдоль наклонной плоскости <math>\varphi </math>.
 +
 +
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy/4829.html|width=760 |height=560|border=0 }}
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy/4829.html|width=760 |height=560|border=0 }}
  

Версия 18:09, 16 декабря 2017

  • "Задача - Мещерский (48.29)"

Условие

На гладкой горизонтальной плоскости помещена треугольная призма ABC массы m, которая может скользить без трения по этой плоскости; по грани призмы AB катится без скольжения однородный круглый цилиндр массы m1. Определить ускорение призмы.

Решение задачи

Используем уравнение Лагранжа 2-го рода:

[math]\frac{d}{dt}\left(\frac{\partial L}{\partial\dot q_i}\right) - \frac{\partial L}{\partial q_i} = 0 , (i = 1,2)[/math] , где

L = T - П - функция Лагранжа
T - кинетическая энергия системы
П - потенциальная энергия системы
q - независимые обобщенные координаты
В данной задаче в качестве обобщенных координат примем изменяющиеся координату призмы x и координату цилиндра c по оси, направленной вдоль наклонной плоскости [math]\varphi [/math].


Разработка

Текст программы на языке JavaScript (разработчик Вараев Владислав):

Файл "4829.html"

  1 <!DOCTYPE html>
  2      <html>
  3      <head>
  4 <title>4829</title>
  5     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\three.js"></script>
  6     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\OBJLoader.js"></script>
  7     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\MTLLoader.js"></script>
  8     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\OBJMTLLoader.js"></script>
  9     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\jquery-1.9.0.js"></script>
 10     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\stats.js"></script>
 11     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\dat.gui.js"></script>
 12     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\chroma.js"></script>
 13     <script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\TrackballControls.js"></script>
 14 	<script type="text/javascript" src="http://tm.spbstu.ru/htmlets/VaraevV/mesherskiy\OrbitControls.js"></script>
 15        
 16     </style>
 17     </head>
 18     <body>
 19 
 20     <div id="Stats-output">
 21     </div>
 22 
 23     <div id="WebGL-output">
 24     </div>
 25 
 26 
 27     <script type="text/javascript">
 28 
 29     $(function () {
 30 	 var a = 0;
 31 	 var g = 9.8;
 32 	 var m = 20;
 33 	 var m1 = 15;
 34 	 var stats = initStats();
 35          var scene = new THREE.Scene();
 36          var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
 37          var renderer = new THREE.WebGLRenderer();
 38          renderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));
 39          renderer.setSize(window.innerWidth, window.innerHeight);
 40          renderer.shadowMapEnabled = true;
 41 		var spotLight = new THREE.SpotLight( 0xffffff );
 42 		spotLight.position.set( -100, 0, -10 ); //-40, 60, -10
 43 		scene.add(spotLight );
 44 				var ugol= 135;
 45 				var alpha0 = Math.cos(ugol*Math.PI/180);
 46 				var step = 0;
 47 					var plane = createMesh0(new THREE.PlaneGeometry(1000, 2000, 50, 50));
 48 				scene.add(plane);
 49 					var cube = createMesh(new THREE.CubeGeometry(2, 200, 800));
 50 						cube.position.x=0;
 51 						cube.position.y=0;
 52 						cube.position.z=0;
 53 				scene.add(cube);
 54 					var cylinder1 = createMesh1(new THREE.CylinderGeometry(25, 25, 60, 15, 1));
 55 						cylinder1.position.x=cube.position.x-400*Math.cos((180-ugol)*Math.PI/180)+25*Math.sin((180-ugol)*Math.PI/180);	
 56 						cylinder1.position.y=cube.position.y;
 57 						cylinder1.position.z=cube.position.z+400*Math.sin((180-ugol)*Math.PI/180)+25*Math.cos((180-ugol)*Math.PI/180);
 58 						var c = cylinder1.position.x;
 59 						var d = cylinder1.position.z;
 60 				scene.add(cylinder1);
 61 					var group1 = new THREE.Object3D();
 62 					group1.add(cube);
 63 					group1.add(cylinder1);
 64 					group1.position.x = 0;
 65 					group1.position.y = 0;
 66 					group1.position.z=0;
 67 				scene.add(group1);
 68 				
 69 		function createMesh0(geom) {
 70                    var meshMaterial = new THREE.MeshNormalMaterial();
 71                    meshMaterial.side = THREE.DoubleSide;
 72                    var wireFrameMat = new THREE.MeshBasicMaterial();
 73                    wireFrameMat.wireframe = true;
 74                    var plane = THREE.SceneUtils.createMultiMaterialObject(geom, [meshMaterial, wireFrameMat]);
 75                    return plane;
 76            }
 77             function createMesh(geom) {
 78              var meshMaterial = new THREE.MeshNormalMaterial();
 79              meshMaterial.side = THREE.DoubleSide;
 80              var wireFrameMat = new THREE.MeshBasicMaterial();
 81              wireFrameMat.wireframe = true;
 82              var mesh = THREE.SceneUtils.createMultiMaterialObject(geom, [meshMaterial, wireFrameMat]);
 83              return mesh;
 84             }
 85 		 function createMesh1(geom) {
 86                          var mat = new THREE.MeshNormalMaterial();
 87 			 var mesh = new THREE.Mesh(geom,mat);
 88 			 return mesh;
 89            }
 90 
 91          camera.position.x = 0;
 92          camera.position.y = -1300;
 93          camera.position.z = 1500;
 94          camera.lookAt(scene.position);
 95 
 96 		 $("#WebGL-output").append(renderer.domElement);
 97 		 renderer.render(scene, camera);
 98 			 var stats = initStats();
 99 		 cameraControls = new THREE.OrbitControls(camera, renderer.domElement);
100 		 cameraControls.maxDistance = 800;
101 		 cameraControls.minDistance = 0.5;
102 		 cameraControls.update();
103 			 var controls = new function() {
104 				 this.Speed = 0.1;
105 				 this.ugol = 135;
106 				 this.m = 20;
107 				 this.m1 = 15;
108 				 this.a='0'
109             }
110 			 var obj = { start_again:function(){ 
111 				 step=0;
112 				 cube.position.x=0;
113 				 cube.position.y=0;
114 				 cube.position.z=0;
115 				 cylinder1.position.x=cube.position.x-400*Math.cos((180-ugol)*Math.PI/180)+25*Math.sin((180-ugol)*Math.PI/180);	
116 				 cylinder1.position.y=cube.position.y;
117 				 cylinder1.position.z=cube.position.z+400*Math.sin((180-ugol)*Math.PI/180)+25*Math.cos((180-ugol)*Math.PI/180);
118 				 group1.position.x = 0;
119 				 group1.position.y = 0;
120 				 group1.position.z=0;
121 		 }};
122 			 var gui = new dat.GUI();
123 				 gui.add(controls, 'Speed',0,0.2);
124 				 gui.add(controls, 'ugol',89.9999,180);
125 				 gui.add(controls, 'm',0.1,50);
126 				 gui.add(controls, 'm1',0.1,50);	
127 				 gui.add(controls,'a').listen();
128 				 gui.add(obj,'start_again');
129 			 var step = 0;
130 		 function render() {
131 			 cameraControls.update();
132 			 requestAnimationFrame(render);
133 			 renderer.render(scene, camera);
134 			 step += controls.Speed
135 		         ugol = controls.ugol
136 			 controls.a=a;
137 			 m = controls.m
138 			 m1=controls.m1
139 				 if(ugol<=135) {
140 					group1.rotation.y=Math.cos(ugol*Math.PI/180);
141 				 }
142 				 else {
143 				 	group1.rotation.y=Math.cos(ugol*Math.PI/180)+Math.cos((ugol-55)*Math.PI/180);
144 			 	 }
145 				 	cylinder1.rotation.y = step*step;
146 			  a = -(g*m1*Math.sin(2*(180-ugol)*Math.PI/180))/(3*(m1+m)-2*m1*((Math.cos((180-ugol)*Math.PI/180))*(Math.cos((180-ugol)*Math.PI/180))));  
147 				var v =0.6*a;
148 			 	 	if (cylinder1.position.z<=25*Math.sin((180-ugol)*Math.PI/180)) {
149 					 	cylinder1.position.x = 25; 
150 						cylinder1.position.z = 25*Math.sin((180-ugol)*Math.PI/180);
151 						cylinder1.rotation.y = 0;
152 			 		 	group1.position.x =group1.position.x+v;			   
153 					} 
154 					else { 
155 			   		group1.position.x = (a*step*step)/2;
156 					cylinder1.position.x=26;  
157 			 		cylinder1.position.z=d-g*Math.sin((180-ugol)*Math.PI/180)*step*step/2;										
158 			 		} 
159 		 } 
160          render();
161 		 function initStats() {
162              var stats = new Stats();
163              stats.setMode(0); // 0: fps, 1: ms
164              stats.domElement.style.position = 'absolute';
165              stats.domElement.style.left = '0px';
166              stats.domElement.style.top = '0px';
167              $("#Stats-output").append(stats.domElement);
168              return stats;
169           }
170      });
171 </script>
172 </body>
173 </html>