Редактирование: КП: Коническая передача

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
 
[[Проектная деятельность по информатике]] > [[Курсовые проекты Группы 09 2015]] > '''Коническая передача''' <HR>
 
[[Проектная деятельность по информатике]] > [[Курсовые проекты Группы 09 2015]] > '''Коническая передача''' <HR>
  
[[File:ConicGears.JPG|400px|right]]
+
[[File:iPhone_image_2015-4-13-1431495674163_1.jpg|800px|right]]
 
'''''Курсовой проект по [[Проектная деятельность по информатике|информатике]]'''''
 
'''''Курсовой проект по [[Проектная деятельность по информатике|информатике]]'''''
  
Строка 10: Строка 10:
 
'''Семестр:''' весна 2015
 
'''Семестр:''' весна 2015
  
== Задача ==
 
Продемонстрировать принцип работы конической передачи на примере двух конусов, осуществляющих передачу вращающего момента под углом 90°. Передаточное число, направление вращения и скорость ведущего вала устанавливаются пользователем.
 
 
Передаточное число менять в диапазоне <math>\left[\frac13;3\right]</math>.
 
 
Скорость ведущего вала менять в диапазоне <math>\left[0;10\right] \times 10^{-1}</math> об/с.
 
 
== Решение ==
 
 
<center>
 
<center>
{{#widget:Iframe|url=https://ailurus.ru/stands/conicGears/|width=960|height:540|border=0}}
+
{{#widget:Iframe|url=http://cl49743.tmweb.ru/node/conicGears/|width=960|height:540|border=0}}
  
<big>[https://ailurus.ru/stands/conicGears/ Страница решения]</big>
+
<big>[http://cl49743.tmweb.ru/node/conicGears/ Страница решения]</big>
 
</center>
 
</center>
 
 
Программа написана на JavaScript с использованием следующих библиотек: Zepto (DOM-навигация), Three.js (WebGL-отрисовка), Dat-gui.js (интерфейс).
 
 
Применение данных библиотек не оправдано условиями текущей задачи и служит лишь демонстрацией их функционала. Однако востребованность такого решения возрастает пропорционально сложности проекта.
 
 
Стандартный интерфейс Dat-gui.js был модифицирован средствами CSS. Также при помощи CSS созданы подписи ведущего и ведомого валов.
 
 
== Исходный код ==
 
 
 
<div class="mw-collapsible mw-collapsed">
 
'''Исходный код  [HTML, JS, CSS]:''' <div class="mw-collapsible-content">
 
Файл '''"common.js"'''
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
/*
 
Created by E.Starobinskii [starobinskii@yahoo.com],SPbPU, TheorMech, 2015.
 
*/
 
$(document).ready(function(){
 
/*
 
------<====== Prelusive ======>------
 
*/
 
var leadCone;
 
var drivenCone;
 
var gui = new dat.GUI();
 
var scene = new THREE.Scene();
 
var spotlight = new THREE.SpotLight(0xffffff);
 
var renderer = new THREE.WebGLRenderer({ antialias: false,alpha:true });
 
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
 
var controls = new function() {
 
  this.angulator = 2.7;
 
  this.ratio = 2;
 
  this.rememberedRatio = this.ratio;
 
}
 
 
camera.position.set(-45, 45, 45);
 
camera.lookAt(scene.position);
 
 
spotlight.position.set(-45, 45, 45);
 
spotlight.castShadow = true;
 
 
[leadCone, leadArbor, drivenCone, drivenArbor] = generateCones(controls.ratio);
 
 
scene.add(leadCone);
 
scene.add(leadArbor);
 
scene.add(drivenCone);
 
scene.add(drivenArbor);
 
scene.add(spotlight);
 
scene.add(new THREE.AmbientLight(0x333333));
 
 
renderer.setClearColor(0x000000, 0);
 
renderer.setSize(window.innerWidth, window.innerHeight);
 
renderer.shadowMapEnabled = true;
 
$('body').append('<div id="output">');
 
$("#output").append(renderer.domElement);
 
 
gui.add(controls, 'angulator', -10, 10).name('Скорость вращ.');
 
gui.add(controls, 'ratio', 0.3, 3).name('Передат. число');
 
 
/*
 
  ------<====== End ======>------
 
------<====== Generator ======>------
 
*/
 
function generateCones(squaredRatio){
 
var PiBy2 = Math.PI / 2;
 
var ratio = Math.sqrt(squaredRatio);
 
var defaultConeRadius = 15;
 
var radiusDividedByRatio = defaultConeRadius / ratio;
 
var radiusMultipliedByRatio = defaultConeRadius * ratio;
 
var coneMaterial = new THREE.MeshLambertMaterial({map: THREE.ImageUtils.loadTexture('./source/coneMaterial.jpg')});
 
var arborMaterial = new THREE.MeshLambertMaterial({map: THREE.ImageUtils.loadTexture('./source/arborMaterial.jpg')});
 
var leadConeGeometry = new THREE.CylinderGeometry(0, radiusMultipliedByRatio, radiusDividedByRatio, 50);
 
var leadCone = new THREE.Mesh(leadConeGeometry, coneMaterial);
 
var leadArborGeometry = new THREE.CylinderGeometry(5, 5, 50, 50);
 
var leadArbor = new THREE.Mesh(leadArborGeometry, arborMaterial);
 
var drivenConeGeometry = new THREE.CylinderGeometry(0, radiusDividedByRatio, radiusMultipliedByRatio, 50);
 
var drivenCone = new THREE.Mesh(drivenConeGeometry, coneMaterial);
 
var drivenArborGeometry = new THREE.CylinderGeometry(5, 5, 50, 50);
 
var drivenArbor = new THREE.Mesh(drivenArborGeometry, arborMaterial);
 
 
leadCone.position.z = - radiusDividedByRatio / 2;
 
leadArbor.position.z = - radiusDividedByRatio - 25;
 
leadCone.rotation.x = Math.PI / 2;
 
leadArbor.rotation.x = Math.PI / 2;
 
leadCone.castShadow = true;
 
leadArbor.castShadow = true;
 
drivenCone.position.x = radiusMultipliedByRatio / 2;
 
drivenArbor.position.x = radiusMultipliedByRatio + 25;
 
drivenCone.rotation.set(PiBy2, 0, PiBy2);
 
drivenArbor.rotation.set(PiBy2, 0, PiBy2);
 
drivenCone.castShadow = true;
 
drivenArbor.castShadow = true;
 
 
return [leadCone, leadArbor, drivenCone, drivenArbor];
 
}
 
/*
 
  ------<====== End ======>------
 
------<====== Rendering ======>------
 
*/
 
(function render() {
 
  var speed = controls.angulator / 100;
 
  var ratio = controls.ratio;
 
 
 
  if(controls.rememberedRatio != ratio){
 
  scene.remove(leadCone);
 
  scene.remove(leadArbor);
 
  scene.remove(drivenCone);
 
  scene.remove(drivenArbor);
 
  [leadCone, leadArbor, drivenCone, drivenArbor] = generateCones(ratio);
 
  scene.add(leadCone);
 
  scene.add(leadArbor);
 
  scene.add(drivenCone);
 
  scene.add(drivenArbor);
 
  controls.rememberedRatio = ratio;
 
  }
 
 
 
  leadCone.rotateY(-speed);
 
  leadArbor.rotateY(-speed);
 
  drivenCone.rotateY(speed * ratio);
 
  drivenArbor.rotateY(speed * ratio);
 
 
 
  requestAnimationFrame(render);
 
  renderer.render(scene, camera);
 
})();
 
/*
 
  ------<====== End ======>------
 
*/
 
});
 
</syntaxhighlight>
 
 
Файл '''"common.css"'''
 
<syntaxhighlight lang="css" line start="1" enclose="div">
 
/*
 
Created by E.Starobinskii [starobinskii@yahoo.com],SPbPU, TheorMech, 2015.
 
*/
 
body{
 
margin: 0;
 
padding: 0;
 
background: gainsboro;
 
overflow: hidden;
 
width: 100%;
 
height: 100%;
 
min-width: 700px;
 
}
 
img{display: none;}
 
#output:before,
 
#output:after{
 
top: 40%;
 
position: fixed;
 
color: white;
 
font-seight: bold;
 
font-size: 24px;
 
background: dodgerblue;
 
border: 3px solid white;
 
padding: 5px 10px;
 
}
 
#output:before{
 
content: 'Ведущий вал';
 
left: 5%;
 
}
 
#output:after{
 
content: 'Ведомый вал';
 
right: 5%;
 
}
 
#output canvas{
 
width: 100%!important;
 
height: auto!important;
 
}
 
.dg.main{
 
width: 700px!important;
 
float: none!important;
 
border: 3px solid white;
 
bottom: 0px;
 
height: 144px;
 
position: fixed;
 
opacity: 0.1;
 
}
 
.dg.main:hover{opacity: 1;}
 
.dg *{
 
font-size: 30px!important;
 
line-height: 50px!important;
 
color: white!important;
 
}
 
.dg li{
 
height: 50px!important;
 
background-color: dodgerblue!important;
 
padding: 10px!important;
 
border: none!important;
 
}
 
.dg li:first-child{
 
border-bottom: 3px solid white!important;
 
}
 
.dg input[type='text'],
 
.dg .slider{
 
height: 46px!important;
 
text-align: center;
 
background-color: lightslategray!important;
 
}
 
.dg .slider-fg{
 
background-color: white!important;
 
}
 
.dg .close-button{display: none;}
 
</syntaxhighlight>
 
 
Файл '''"index.php"'''
 
<syntaxhighlight lang="html5" line start="1" enclose="div">
 
<!DOCTYPE html>
 
<html lang="ru">
 
<head>
 
<title>Коническая передача</title>
 
<meta charset="utf-8">
 
<meta coder="E. Starobinskii">
 
<link rel="stylesheet" href="./source/common.css"></link>
 
</head>
 
<body>
 
<script src="https://ajax.googleapis.com/ajax/libs/threejs/r69/three.min.js"></script>
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.5/dat.gui.min.js"></script>
 
<script src="http://zeptojs.com/zepto.min.js"></script>
 
<script src="./source/common.js"></script>
 
</body>
 
</html>
 
</syntaxhighlight>
 
</div>
 
</div>
 
 
[[ Медиа : ConicGears.zip|Исходный код [php js css].zip]]
 
 
== См. также ==
 
 
* [[Справка:Содержание|Справочная информация]]
 
* [[Проектная деятельность по информатике]]
 
 
 
[[Category: Студенческие проекты]]
 
Вам запрещено изменять защиту статьи. 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:

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