Мещерский 48.6

Материал из Department of Theoretical and Applied Mechanics
Версия от 11:54, 22 декабря 2017; 188.170.72.46 (обсуждение) (Решение)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

ещерский Задача 48.6

Визуализация 3D-задачи по динамике на JavaScript

Исполнитель: Елизаров Михаил

Группа 23632/2 Кафедра Теоретической механики

Условие задачи[править]

В эпициклическом механизме бегающая шестеренка радиуса [math]r_1[/math] насажена на кривошип с противовесом, вращающийся вокруг оси неподвижной шестеренки под действием приложенного момента M. Определить угловое ускорение вращения кривошипа и окружное усилие S в точке касания шестеренок, если расстояние между осями шестеренок равно l, момент инерции кривошипа с противовесом относительно оси вращения кривошипа равен [math]J_0[/math], масса бегающей шестеренки [math]m_1[/math], момент инерции шестеренки относительно ее оси [math]J_1[/math]; трением пренебречь, центр масс шестеренки и кривошипа с противовесом находится на оси вращения кривошипа.

Решение[править]

[math] T =J_0 \frac{\dot φ^2}{2}+\frac{m_1 v_{o1}}{2} +J_1 \frac{ω_1^2}{2} \ 2[/math]
[math]v_{01} =ωl =\dot φ l[/math]

[math] ω_1= \frac{\dot φ l }{r_1}[/math]
[math]T = (\frac{J_0}{2}+\frac{m_1 l^2}{2}+\frac{J_1 l^2}{2r_1^2}) \dot φ^2 [/math]
[math]\frac{d}{dt}(\frac{δT}{δ \dot φ }) = (J_0 + m_1 l^2+\frac{J_1 l^2}{2r_1^2}) \ddot φ[/math]
[math]\frac{δT}{δφ }= 0[/math]
[math]\frac{-δП}{δφ }= M[/math]
[math](J_0 + m_1 l^2+\frac{J_1 l^2}{2r_1^2}) \ddot φ= M[/math]
[math] \ddot φ = ε [/math]
[math] ε = \frac{M}{J_0+m_1 l^2+J_1 l^2 / r_1^2}[/math]

[math][/math]

Визуализация[править]

Код программы[править]

  1 var stats = initStats();
  2 		var scene = new THREE.Scene();
  3 		var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
  4 	    var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
  5 		var webGLRenderer = new THREE.WebGLRenderer();
  6         webGLRenderer.setClearColor(new THREE.Color(0xEEEEEE));
  7         webGLRenderer.setSize(window.innerWidth, window.innerHeight);
  8         webGLRenderer.shadowMapEnabled = true;
  9         camera.position.x = 65;
 10         camera.position.y = 65;
 11         camera.position.z = 65;
 12         camera.lookAt(new THREE.Vector3(0, 0, 0));
 13 		var planeGeometry = new THREE.PlaneBufferGeometry(100,100);
 14 		var planeMaterial = new THREE.MeshBasicMaterial({color:0x555555});
 15 		var plane = new THREE.Mesh(planeGeometry, planeMaterial);
 16 		plane.rotation.x = -0.5 * Math.PI;
 17 		plane.position.x = 0;
 18 		plane.position.y = 0;
 19 		plane.position.z = 0;		
 20 		var plane2 = new THREE.Mesh(planeGeometry, planeMaterial);
 21 		plane2.rotation.x = -1.5*Math.PI;
 22 		plane2.position.x = 0;
 23 		plane2.position.y = 0;
 24 		plane2.position.z = 0;
 25 		height0 =5;
 26 		r20=3
 27 		l10 = 10;
 28 		var cyl2Material = new THREE.MeshNormalMaterial();
 29 		var cyl2;
 30 		var cyl1;		
 31 		var phase2 = 0;
 32 		var S = 5;
 33 		var vectMaterial = new THREE.MeshBasicMaterial({color: 0x00ff00});
 34 		var cylMat1 = new THREE.MeshBasicMaterial({color: 0xff0000});
 35 		var cylMat2 = new THREE.MeshBasicMaterial({color: 0x0000ff});
 36 		var crankMaterial = new THREE.MeshNormalMaterial();
 37 		var crank;
 38 		var phase1 = 0;
 39 		var eps = 0;
 40 		var group;
 41 		var controls = new function () {
 42 			this.height =5;
 43 			this.r2=3
 44 			this.l1 = 10;
 45 			this.m1 = 5;
 46 			this.Time = 5;
 47 			this.M = 0.1;
 48 			this.J0 = 1;
 49 			this.J1 = 1;
 50 			
 51 			
 52 			
 53 			this.cyl2posX = 10;
 54 			this.cyl2posY = height0/2;
 55 			this.cyl2posZ = 0;
 56 			
 57 			this.crankposX = 5;
 58 			this.crankposZ = 0;
 59 			this.crankposY= height0+0.5
 60 			this.crankRotZ = 0.5*Math.PI;
 61 			this.redraw = function () {
 62 				scene.remove(group);
 63 				scene.remove(cyl1);
 64 
 65 				cyl2 = new THREE.Mesh(new THREE.CylinderGeometry(controls.r2, controls.r2, controls.height, 100, 100, false,Math.PI,Math.PI),cylMat1);
 66 				cyl2_ = new THREE.Mesh(new THREE.CylinderGeometry(controls.r2, controls.r2, controls.height, 100, 100, false,0,Math.PI),cylMat2);
 67 				vect = new THREE.Mesh(new THREE.CylinderGeometry(0.03,0.03, S,20,20,false), vectMaterial);
 68 				vectarrow = new THREE.Mesh(new THREE.CylinderGeometry(0,0.12, 2,20,20,false), vectMaterial);
 69 				crank = new THREE.Mesh( new THREE.CylinderGeometry(0.5,0.5,controls.l1,50,50, false), new THREE.MeshNormalMaterial() );
 70 				r1 = controls.l1-controls.r2;
 71 				cyl1 = new THREE.Mesh(new THREE.CylinderGeometry(r1,r1, controls.height,100,100,false),new THREE.MeshNormalMaterial());
 72 				
 73 				
 74 				cyl2.position.set(controls.l1,controls.cyl2posY,controls.cyl2posZ);
 75 				cyl2_.position.set(controls.l1,controls.cyl2posY,controls.cyl2posZ);
 76 				cyl2_.rotation.set(0,phase2,0);
 77 				cyl2.rotation.set(0,phase2,0);
 78 				crank.position.set(controls.l1*0.5,controls.crankposY,controls.crankposZ);
 79 				crank.rotation.set(0,0,controls.crankRotZ);
 80 				cyl1.position.y = controls.height/2;
 81 				vect.position.set(r1,controls.height/2,S/2);
 82 				vectarrow.position.set(r1,controls.height/2,S/2+2);
 83 				vect.rotation.set(0.5*Math.PI,0,0);
 84 				vectarrow.rotation.set(0.5*Math.PI,0,0);
 85 				
 86 				group = new THREE.Group();
 87 		
 88 				group.position.x = 0;
 89 				group.position.y = 0;
 90 				group.position.z = 0;
 91 				
 92 				group.add(cyl2_);
 93 				group.add(cyl2);
 94 				group.add(crank);
 95 				group.add(vect);
 96 				group.add(vectarrow);
 97 
 98 				
 99 				group.rotation.y = phase1;
100 				
101 				scene.add(group);
102 				scene.add(cyl1);
103 			}
104 		}		
105 		
106 		scene.add(plane);
107 		scene.add(plane2);
108 
109 		document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);
110 		
111 		var gui = new dat.GUI();
112 		gui.add(controls, 'r2', 3, controls.l1-0.05).onChange(controls.redraw);
113 		gui.add(controls, 'l1', 10, 30).onChange(controls.redraw);
114 		gui.add(controls, 'm1', 0.6, 10);
115 		gui.add(controls,'Time', 0.1, 10);
116 		gui.add(controls, 'M',0,180);
117 		gui.add(controls, 'J0',0,250);
118 		gui.add(controls, 'J1',0,250);
119 		var step =0;
120 		
121 		
122 		controls.redraw();
123 		render();
124 		orbit = new THREE.OrbitControls(camera, webGLRenderer.domElement);
125 		orbit.enableDamping = true;	
126 		function render() {
127             stats.update();
128 			step0 = Math.PI/(controls.Time * 60);
129 			step += 2*step0;
130 			//step =1/360;
131 			sum = controls.J0+controls.m1*(controls.l1)^2 + (controls.J1*(controls.l1)^2)/(controls.r2)^2;
132 			eps = (controls.M / sum);
133 			S = (controls.J1*controls.l1*eps)/(controls.r1);
134             group.rotation.y += (step*eps);
135 			cyl2.rotation.y += ((step*eps*controls.l1)/(controls.r2)); 
136 			cyl2_.rotation.y +=((step*eps*controls.l1)/(controls.r2)); 
137 
138 //        controls.positionBoundingBox();
139             // render using requestAnimationFrame
140             requestAnimationFrame(render);
141 
142             webGLRenderer.render(scene, camera);
143 			phase1 = group.rotation.y;
144 			
145 			phase2=cyl2.rotation.y;
146         }
147 		
148 		function initStats() {
149 
150             var stats = new Stats();
151             stats.setMode(0); // 0: fps, 1: ms
152 
153             // Align top-left
154             stats.domElement.style.position = 'absolute';
155             stats.domElement.style.left = '0px';
156             stats.domElement.style.top = '0px';
157 
158             document.getElementById("Stats-output").appendChild(stats.domElement);
159 
160             return stats;
161         }
162 	}