Редактирование: Мещерский Задача 6.11

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 21: Строка 21:
 
<html>
 
<html>
 
     <head>
 
     <head>
        <script src = "http://tm.spbstu.ru/htmlets/Lobanov_I_Y/JS_files/three.js"></script>
+
  <script src ="http://tm.spbstu.ru/htmlets/Lobanov_I_Y/JS_files/three.js"></script>
        <script src = "http://tm.spbstu.ru/htmlets/Lobanov_I_Y/JS_files/OrbitControls.js"></script>
+
  <script src ="http://tm.spbstu.ru/htmlets/Lobanov_I_Y/JS_files/stats.min.js"></script>
        <script src = "http://tm.spbstu.ru/htmlets/Lobanov_I_Y/JS_files/dat.gui.min.js"></script>
+
  <script src ="http://tm.spbstu.ru/htmlets/Lobanov_I_Y/JS_files/OrbitControls.js"></script>
        <script src = "http://tm.spbstu.ru/htmlets/Lobanov_I_Y/JS_files/stats.min.js"></script>
+
  <script src ="http://tm.spbstu.ru/htmlets/Lobanov_I_Y/JS_files/dat.gui.js"></script>
 
     </head>
 
     </head>
 
     <body>
 
     <body>
Строка 31: Строка 31:
 
         <script>
 
         <script>
 
              
 
              
             var scene,     
+
             var scene,    //Сцена.
                 camera,     
+
                 camera,    //Камера.
                 renderer;   
+
                 renderer;  //Рендер.
 
              
 
              
             var LENGTH_AB = 20;   
+
             var LENGTH_AB = 20;  //Длина стойки AB.
             var RADIUS_RACK = 1;  
+
             var RADIUS_RACK = 1; //Радиус стойки.
             var statFPS;         
+
             var statFPS;        //Объект, для вывода информации о текущем FPS.
 
              
 
              
             var panelControlOptions;  
+
             var panelControlOptions; //Объект, через которую изменяется угол альфа и вес груза, а так же возможность отображения усилий.
             var panelInfoEffort;     
+
             var panelInfoEffort;    //Объект, через который выводим информацию об усилиях.
             var gui;                 
+
             var gui;                //Панель с интерфейсом.
 
              
 
              
 
             //Стойка AB.
 
             //Стойка AB.
             var geometryRackAB,   
+
             var geometryRackAB,  //Геометрическая фигура.
                 materialRackAB,   
+
                 materialRackAB,  //Материал.
                 meshRackAB,       
+
                 meshRackAB,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorRackAB = {color: 0x6A5ACD};  
+
                 colorRackAB = {color: 0x6A5ACD}; //Цвет.
 
              
 
              
 
             //Стойка BD.
 
             //Стойка BD.
             var geometryRackBD,   
+
             var geometryRackBD,  //Геометрическая фигура.
                 materialRackBD,   
+
                 materialRackBD,  //Материал.
                 meshRackBD,       
+
                 meshRackBD,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorRackBD = {color: 0x6A5ACD};  
+
                 colorRackBD = {color: 0x6A5ACD}; //Цвет.
 
              
 
              
 
             //Стойка BE.
 
             //Стойка BE.
             var geometryRackBE,   
+
             var geometryRackBE,  //Геометрическая фигура.
                 materialRackBE,   
+
                 materialRackBE,  //Материал.
                 meshRackBE,       
+
                 meshRackBE,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorRackBE = {color: 0x6A5ACD};             
+
                 colorRackBE = {color: 0x6A5ACD}; //Цвет.
 +
              
 
             //Стойка AC.
 
             //Стойка AC.
             var geometryRackAC,  
+
             var geometryRackAC, //Геометрическая фигура.
                 materialRackAC,   
+
                 materialRackAC,  //Материал.
                 meshRackAC,       
+
                 meshRackAC,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorRackAC = {color: 0x6A5ACD};
+
                 colorRackAC = {color: 0x6A5ACD}; //Цвет.
 
              
 
              
 
             //Шарнир в точке B.
 
             //Шарнир в точке B.
             var geometryHingeB,   
+
             var geometryHingeB,  //Геометрическая фигура.
                 materialHingeB,   
+
                 materialHingeB,  //Материал.
                 meshHingeB,       
+
                 meshHingeB,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorHingeB = {color: 0x6A5ACD};
+
                 colorHingeB = {color: 0x6A5ACD}; //Цвет.
 
              
 
              
 
             //Шарнир в точке A.
 
             //Шарнир в точке A.
             var geometryHingeA,   
+
             var geometryHingeA,  //Геометрическая фигура.
                 materialHingeA,   
+
                 materialHingeA,  //Материал.
                 meshHingeA,       
+
                 meshHingeA,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorHingeA = {color: 0x6A5ACD};  
+
                 colorHingeA = {color: 0x6A5ACD}; //Цвет.
 
              
 
              
 
             //Шарнир в точке D.
 
             //Шарнир в точке D.
             var geometryHingeD,   
+
             var geometryHingeD,  //Геометрическая фигура.
                 materialHingeD,   
+
                 materialHingeD,  //Материал.
                 meshHingeD,       
+
                 meshHingeD,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorHingeD = {color: 0x6A5ACD};  
+
                 colorHingeD = {color: 0x6A5ACD}; //Цвет.
 
              
 
              
 
             //Шарнир в точке E.
 
             //Шарнир в точке E.
             var geometryHingeE,   
+
             var geometryHingeE,  //Геометрическая фигура.
                 materialHingeE,   
+
                 materialHingeE,  //Материал.
                 meshHingeE,       
+
                 meshHingeE,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorHingeE = {color: 0x6A5ACD};  
+
                 colorHingeE = {color: 0x6A5ACD}; //Цвет.
 
              
 
              
 
             //Трос.
 
             //Трос.
             var geometryCableBCP,   
+
             var geometryCableBCP,  //Геометрическая фигура.
                 materialCableBCP,   
+
                 materialCableBCP,  //Материал.
                 meshCableBCP,       
+
                 meshCableBCP,      //Объект сцены (на геом. фигуру накладываем материал).
                 colorCableBCP = {color: 0x000000};  
+
                 colorCableBCP = {color: 0x000000}; //Цвет.
 
              
 
              
 
              
 
              
             //Наконечник стойки AC.
+
             //Наконечник стоки AC.
             var geometryEndRackAC,  
+
             var geometryEndRackAC, //Геометрическая фигура.
                 materialEndRackAC,  
+
                 materialEndRackAC, //Материал.
                 meshEndRackAC,     
+
                 meshEndRackAC,    //Объект сцены (на геом. фигуру накладываем материал).
                 colorEndRackAC = {color: 0x6A5ACD};  
+
                 colorEndRackAC = {color: 0x6A5ACD}; //Цвет.
 
              
 
              
 
             //Груз.
 
             //Груз.
             var geometryCargoP,  
+
             var geometryCargoP, //Геометрическая фигура.
                 materialCargoP,  
+
                 materialCargoP, //Материал.
                 meshCargoP,  
+
                 meshCargoP,     //Объект сцены (на геом. фигуру накладываем материал).
                 colorCargoP = {color: 0xFF4500};  
+
                 colorCargoP = {color: 0xFF4500}; //Цвет.
           
 
           
 
            var vectorEffortAB,         
 
                colorEffortAB = 0xFF0000; 
 
 
              
 
              
 +
            //Вектор усилия опоры AB.
 +
            var vectorEffortAB,            //Вектор.
 +
                colorEffortAB = 0xFF0000;  //Цвет.
 
              
 
              
             var vectorEffortBD,             
+
            //Вектор усилия опоры BD.
                 colorEffortBD = 0xFF0000;  
+
             var vectorEffortBD,            //Вектор.
 +
                 colorEffortBD = 0xFF0000; //Цвет.
 
              
 
              
         
+
            //Вектор усилия опоры BE.
             var vectorEffortBE,             
+
             var vectorEffortBE,            //Вектор.
                 colorEffortBE = 0xFF0000;   
+
                 colorEffortBE = 0xFF0000;  //Цвет.
 
              
 
              
             //Функции инициализации
+
             //Функции инициализации, которая создает необходимые объекты. Для работы приложения.
 
             function init() {
 
             function init() {
                 scene = new THREE.Scene();
+
                 scene = new THREE.Scene(); //Создаем сцену.
                 camera = new THREE.PerspectiveCamera(100, window.innerWidth / window.innerHeight, 0.1, 100);  
+
                 camera = new THREE.PerspectiveCamera(100, window.innerWidth / window.innerHeight, 0.1, 100); //Добавляем камеру (точка с которой смотрит на сцену пользователь).
                 renderer = new THREE.WebGLRenderer();
+
                 renderer = new THREE.WebGLRenderer(); //Создаем WebGL-рендер.
                 renderer.setSize(window.innerWidth, window.innerHeight);
+
                 renderer.setSize(window.innerWidth, window.innerHeight); //Задаем размеры рендера.
                 renderer.setClearColor(0xEEEEEE);  
+
                 renderer.setClearColor(0xEEEEEE); //Задем цвет фона (серый цвет).
 
                 //renderer.shadowMap.enabled=true;
 
                 //renderer.shadowMap.enabled=true;
  
                 document.getElementById("WebGL").appendChild(renderer.domElement);  
+
                 document.getElementById("WebGL").appendChild(renderer.domElement); //Добавляем рендер на страницу.
 
                  
 
                  
 +
                //Задаем позицию камеры.
 
                 camera.position.x = 0;
 
                 camera.position.x = 0;
 
                 camera.position.y = 0;
 
                 camera.position.y = 0;
Строка 137: Строка 139:
 
                 camera.lookAt(0, 0, 0);
 
                 camera.lookAt(0, 0, 0);
 
                  
 
                  
                 axes = new THREE.AxisHelper(50);  
+
                 axes = new THREE.AxisHelper(50); //Создаем оси координат.
                 scene.add(axes);  
+
                 scene.add(axes); //Добавляем оси координат на сцену.
  
                 control = new THREE.OrbitControls(camera,renderer.domElement);  
+
                 control = new THREE.OrbitControls(camera,renderer.domElement); //Добавляем управление мышью (маштаб и ракурс обзора).
 
                  
 
                  
 +
                //Создали объект через который меняем угол альфа и вес груза, а так же отображение усилий.
 
                 panelControlOptions = new function() {
 
                 panelControlOptions = new function() {
                     this.alpha = 0.0;  
+
                     this.alpha = 0.0;   //Угол альфа.
                     this.weightP = 10.0;  
+
                     this.weightP = 10.0; //Вес груза.
                     this.visibleEffort = true;  
+
                     this.visibleEffort = true; //Отображения усилий.
 
                 }
 
                 }
 
                  
 
                  
 +
                //Создали объект, через который выводим информацию об усилиях.
 
                 panelInfoEffort = new function() {
 
                 panelInfoEffort = new function() {
 
                     this.Sbd = '0';
 
                     this.Sbd = '0';
Строка 153: Строка 157:
 
                     this.Sab = '0';
 
                     this.Sab = '0';
 
                 }
 
                 }
                 gui = new dat.GUI();  
+
                 gui = new dat.GUI(); //Создали панель.
 +
                //Добавили на панель возможность изменять угол. При изменения вызывается функция перерисовки сцены.
 
                 gui.add(panelControlOptions, 'alpha', -90, 90).onChange(redrawCraneElements);  
 
                 gui.add(panelControlOptions, 'alpha', -90, 90).onChange(redrawCraneElements);  
 +
                //Добавили на панель возможность изменять вес груза. При изменения вызывается функция перерисовки сцены.
 
                 gui.add(panelControlOptions, 'weightP', 1, 100).onChange(redrawCraneElements);  
 
                 gui.add(panelControlOptions, 'weightP', 1, 100).onChange(redrawCraneElements);  
 +
                //Добавили на панель возможность показа/скрытия усилий. При изменения вызывается функция перерисовки сцены.
 
                 gui.add(panelControlOptions, 'visibleEffort').onChange(redrawCraneElements);  
 
                 gui.add(panelControlOptions, 'visibleEffort').onChange(redrawCraneElements);  
 
                  
 
                  
 +
                //Добавили на панель вывод усилий стоек.
 
                 gui.add(panelInfoEffort, 'Sbd').listen();
 
                 gui.add(panelInfoEffort, 'Sbd').listen();
 
                 gui.add(panelInfoEffort, 'Sbe').listen();
 
                 gui.add(panelInfoEffort, 'Sbe').listen();
 
                 gui.add(panelInfoEffort, 'Sab').listen();
 
                 gui.add(panelInfoEffort, 'Sab').listen();
 
                  
 
                  
                 drawStaticCraneElements();   
+
                 drawStaticCraneElements();  //Добавление статичных элементов крана на сцену.
                 drawDynamicCraneElements();  
+
                 drawDynamicCraneElements(); //Добавление динамических элементов крана на сцену.
 
      
 
      
 
                 statFPS = initStatFPS();
 
                 statFPS = initStatFPS();
                 render();  
+
                 render(); //Отрисовываем сцену.
 
      
 
      
 +
                //Повешали обработчик на событие: изменение размеров окна.
 
                 window.addEventListener('resize',changeSizeWindow,false);
 
                 window.addEventListener('resize',changeSizeWindow,false);
 
             }
 
             }
 
              
 
              
 +
            //Функция добавления статичный элементов крана на сцену.
 
             function drawStaticCraneElements() {
 
             function drawStaticCraneElements() {
                 geometryRackAB = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, LENGTH_AB, 32);  
+
                //Создаем стойку AB.
                 materialRackAB = new THREE.MeshBasicMaterial(colorRackAB);                             
+
                 geometryRackAB = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, LENGTH_AB, 32); //Создаем фигуру (цилиндр).
                 meshRackAB = new THREE.Mesh(geometryRackAB, materialRackAB);                        
+
                 materialRackAB = new THREE.MeshBasicMaterial(colorRackAB);                            //Создаем материал.
 +
                 meshRackAB = new THREE.Mesh(geometryRackAB, materialRackAB);                         //Создаем объект сцены.
 +
                //Задаем положение центра стойки.
 
                 meshRackAB.position.x = 0;
 
                 meshRackAB.position.x = 0;
 
                 meshRackAB.position.y = LENGTH_AB / 2;
 
                 meshRackAB.position.y = LENGTH_AB / 2;
 
                 meshRackAB.position.z = 0;
 
                 meshRackAB.position.z = 0;
 +
                //Помещаем стойку на сцену.
 
                 scene.add(meshRackAB);
 
                 scene.add(meshRackAB);
 
                  
 
                  
                 geometryRackBD = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32);  
+
                //Создаем стойку BD.
                 materialRackBD = new THREE.MeshBasicMaterial(colorRackBD);                                           
+
                 geometryRackBD = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32); //Создаем фигуру (цилиндр).
                 meshRackBD = new THREE.Mesh(geometryRackBD, materialRackBD);                                      
+
                 materialRackBD = new THREE.MeshBasicMaterial(colorRackBD);                                          //Создаем материал.
 +
                 meshRackBD = new THREE.Mesh(geometryRackBD, materialRackBD);                                         //Создаем объект сцены.
 +
                //Задаем положение центра стойки.
 
                 meshRackBD.position.x = -Math.cos(Math.PI / 4) * (LENGTH_AB / 2);
 
                 meshRackBD.position.x = -Math.cos(Math.PI / 4) * (LENGTH_AB / 2);
 
                 meshRackBD.position.y = LENGTH_AB / 2;
 
                 meshRackBD.position.y = LENGTH_AB / 2;
 
                 meshRackBD.position.z = Math.sin(Math.PI / 4) * (LENGTH_AB / 2);
 
                 meshRackBD.position.z = Math.sin(Math.PI / 4) * (LENGTH_AB / 2);
 +
                //Задаем углы поворота стойки.
 
                 meshRackBD.rotation.y = Math.PI / 4;
 
                 meshRackBD.rotation.y = Math.PI / 4;
 
                 meshRackBD.rotation.z = -Math.PI / 4;
 
                 meshRackBD.rotation.z = -Math.PI / 4;
 +
                //Помещаем стойку на сцену.
 
                 scene.add(meshRackBD);
 
                 scene.add(meshRackBD);
 
                  
 
                  
                 geometryRackBE = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32);  
+
                //Создаем стойку BE.
                 materialRackBE = new THREE.MeshBasicMaterial(colorRackBE);                                           
+
                 geometryRackBE = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32); //Создаем фигуру (цилиндр).
                 meshRackBE = new THREE.Mesh(geometryRackBE, materialRackBE);                                      
+
                 materialRackBE = new THREE.MeshBasicMaterial(colorRackBE);                                          //Создаем материал.
 +
                 meshRackBE = new THREE.Mesh(geometryRackBE, materialRackBE);                                         //Создаем объект сцены.
 +
                //Задаем положение центра стойки.
 
                 meshRackBE.position.x = -Math.cos(Math.PI / 4) * (LENGTH_AB / 2);
 
                 meshRackBE.position.x = -Math.cos(Math.PI / 4) * (LENGTH_AB / 2);
 
                 meshRackBE.position.y = LENGTH_AB / 2;
 
                 meshRackBE.position.y = LENGTH_AB / 2;
 
                 meshRackBE.position.z = -Math.sin(Math.PI / 4) * (LENGTH_AB / 2);
 
                 meshRackBE.position.z = -Math.sin(Math.PI / 4) * (LENGTH_AB / 2);
 +
                //Задаем углы поворота стойки.
 
                 meshRackBE.rotation.y = -Math.PI / 4;
 
                 meshRackBE.rotation.y = -Math.PI / 4;
 
                 meshRackBE.rotation.z = -Math.PI / 4;
 
                 meshRackBE.rotation.z = -Math.PI / 4;
 +
                //Помещаем стойку на сцену.
 
                 scene.add(meshRackBE);
 
                 scene.add(meshRackBE);
 
                  
 
                  
                 geometryHingeB = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);   
+
                //Создаем шарнир в точке B.
                 materialHingeB = new THREE.MeshBasicMaterial(colorHingeB);       
+
                 geometryHingeB = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);  //Создаем фигуру (сфера).
                 meshHingeB = new THREE.Mesh(geometryHingeB, materialHingeB);     
+
                 materialHingeB = new THREE.MeshBasicMaterial(colorHingeB);      //Создаем материал.
 +
                 meshHingeB = new THREE.Mesh(geometryHingeB, materialHingeB);    //Создаем объект сцены.
 +
                //Задаем положение центра шарнира.
 
                 meshHingeB.position.y = LENGTH_AB;
 
                 meshHingeB.position.y = LENGTH_AB;
 +
                //Помещаем шарнир на сцену.
 
                 scene.add(meshHingeB);
 
                 scene.add(meshHingeB);
 
                  
 
                  
                 geometryHingeA = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);   
+
                //Создаем шарнир в точке A.
                 materialHingeA = new THREE.MeshBasicMaterial(colorHingeA);       
+
                 geometryHingeA = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);  //Создаем фигуру (сфера).
                 meshHingeA = new THREE.Mesh(geometryHingeA, materialHingeA);     
+
                 materialHingeA = new THREE.MeshBasicMaterial(colorHingeA);      //Создаем материал.
 +
                 meshHingeA = new THREE.Mesh(geometryHingeA, materialHingeA);    //Создаем объект сцены.
 +
                //Помещаем шарнир на сцену.
 
                 scene.add(meshHingeA);
 
                 scene.add(meshHingeA);
 
                  
 
                  
                 geometryHingeD = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);   
+
                //Создаем шарнир в точке D.
                 materialHingeD = new THREE.MeshBasicMaterial(colorHingeD);       
+
                 geometryHingeD = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);  //Создаем фигуру (сфера).
                 meshHingeD = new THREE.Mesh(geometryHingeD, materialHingeD);     
+
                 materialHingeD = new THREE.MeshBasicMaterial(colorHingeD);      //Создаем материал.
 +
                 meshHingeD = new THREE.Mesh(geometryHingeD, materialHingeD);    //Создаем объект сцены.
 +
                //Задаем положение центра шарнира.
 
                 meshHingeD.position.x = -LENGTH_AB * Math.cos(Math.PI / 4);
 
                 meshHingeD.position.x = -LENGTH_AB * Math.cos(Math.PI / 4);
 
                 meshHingeD.position.z = LENGTH_AB * Math.sin(Math.PI / 4);
 
                 meshHingeD.position.z = LENGTH_AB * Math.sin(Math.PI / 4);
 +
                //Помещаем шарнир на сцену.
 
                 scene.add(meshHingeD);
 
                 scene.add(meshHingeD);
 
                  
 
                  
                 geometryHingeE = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);   
+
                //Создаем шарнир в точке E.
                 materialHingeE = new THREE.MeshBasicMaterial(colorHingeE);       
+
                 geometryHingeE = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);  //Создаем фигуру (сфера).
                 meshHingeE = new THREE.Mesh(geometryHingeE, materialHingeE);     
+
                 materialHingeE = new THREE.MeshBasicMaterial(colorHingeE);      //Создаем материал.
 +
                 meshHingeE = new THREE.Mesh(geometryHingeE, materialHingeE);    //Создаем объект сцены.
 +
                //Задаем положение центра шарнира.
 
                 meshHingeE.position.x = -LENGTH_AB * Math.cos(Math.PI / 4);
 
                 meshHingeE.position.x = -LENGTH_AB * Math.cos(Math.PI / 4);
 
                 meshHingeE.position.z = -LENGTH_AB * Math.sin(Math.PI / 4);
 
                 meshHingeE.position.z = -LENGTH_AB * Math.sin(Math.PI / 4);
 +
                //Помещаем шарнир на сцену.
 
                 scene.add(meshHingeE);
 
                 scene.add(meshHingeE);
 
                  
 
                  
                 renderer.render(scene, camera);  
+
                 renderer.render(scene, camera); //Рендинг сцены.
 
             }
 
             }
 +
            //Функция добавления динамичных элементов крана на сцену.
 
             function drawDynamicCraneElements() {
 
             function drawDynamicCraneElements() {
                 var ALPHA = panelControlOptions.alpha / 180 * Math.PI;  
+
                 var ALPHA = panelControlOptions.alpha / 180 * Math.PI; //Получаем текущие значение угла альфа.
                 var WEIGHT_P = panelControlOptions.weightP;  
+
                 var WEIGHT_P = panelControlOptions.weightP; //Получаем текущий вес груза.
 
                  
 
                  
 +
                //Вычисляем усилия стоек.
 
                 panelInfoEffort.Sbd = WEIGHT_P * (Math.cos(ALPHA) - Math.sin(ALPHA));
 
                 panelInfoEffort.Sbd = WEIGHT_P * (Math.cos(ALPHA) - Math.sin(ALPHA));
 
                 panelInfoEffort.Sbe = WEIGHT_P * (Math.cos(ALPHA) + Math.sin(ALPHA));
 
                 panelInfoEffort.Sbe = WEIGHT_P * (Math.cos(ALPHA) + Math.sin(ALPHA));
 
                 panelInfoEffort.Sab = -WEIGHT_P * Math.sqrt(2) * Math.cos(ALPHA);
 
                 panelInfoEffort.Sab = -WEIGHT_P * Math.sqrt(2) * Math.cos(ALPHA);
 
                  
 
                  
                 geometryRackAC = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32);  
+
                //Создаем стойку AC.
                 materialRackAC = new THREE.MeshBasicMaterial(colorRackAC);                                           
+
                 geometryRackAC = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32); //Создаем фигуру (цилиндр).
                 meshRackAC = new THREE.Mesh(geometryRackAC, materialRackAC);                                         
+
                 materialRackAC = new THREE.MeshBasicMaterial(colorRackAC);                                          //Создаем материал.
 +
                 meshRackAC = new THREE.Mesh(geometryRackAC, materialRackAC);                                        //Создаем объект сцены.
 +
                //Задаем положение центра стойки.
 
                 meshRackAC.position.x = Math.cos(ALPHA) * (LENGTH_AB / 2);
 
                 meshRackAC.position.x = Math.cos(ALPHA) * (LENGTH_AB / 2);
 
                 meshRackAC.position.y = LENGTH_AB / 2;
 
                 meshRackAC.position.y = LENGTH_AB / 2;
 
                 meshRackAC.position.z = -Math.sin(ALPHA) * (LENGTH_AB / 2);
 
                 meshRackAC.position.z = -Math.sin(ALPHA) * (LENGTH_AB / 2);
 +
                //Задаем углы поворота стойки.
 
                 meshRackAC.rotation.y = ALPHA;
 
                 meshRackAC.rotation.y = ALPHA;
 
                 meshRackAC.rotation.z = -Math.PI / 4;
 
                 meshRackAC.rotation.z = -Math.PI / 4;
 +
                //Помещаем стойку на сцену.
 
                 scene.add(meshRackAC);
 
                 scene.add(meshRackAC);
 
                  
 
                  
                 geometryCableBCP = new THREE.Geometry();  
+
                //Создаем тросс через точку B, C и P.
 +
                 geometryCableBCP = new THREE.Geometry(); //Создаем пустую геом. фигура.
 +
                //Добавляем в фигуру 3 точки.
 
                 geometryCableBCP.vertices.push(
 
                 geometryCableBCP.vertices.push(
                     new THREE.Vector3(0, LENGTH_AB + RADIUS_RACK, 0),  
+
                     new THREE.Vector3(0, LENGTH_AB + RADIUS_RACK, 0), //Точка B.
                     new THREE.Vector3(Math.cos(ALPHA) * (LENGTH_AB + RADIUS_RACK), LENGTH_AB + RADIUS_RACK, -Math.sin(ALPHA) * (LENGTH_AB + RADIUS_RACK)),
+
                     new THREE.Vector3(Math.cos(ALPHA) * (LENGTH_AB + RADIUS_RACK), LENGTH_AB + RADIUS_RACK, -Math.sin(ALPHA) * (LENGTH_AB + RADIUS_RACK)), //Точка C.
                     new THREE.Vector3(Math.cos(ALPHA) * (LENGTH_AB + RADIUS_RACK), LENGTH_AB / 2, -Math.sin(ALPHA) * (LENGTH_AB + RADIUS_RACK)));           
+
                     new THREE.Vector3(Math.cos(ALPHA) * (LENGTH_AB + RADIUS_RACK), LENGTH_AB / 2, -Math.sin(ALPHA) * (LENGTH_AB + RADIUS_RACK)));          //Точка P.
 
                  
 
                  
                 materialCableBCP = new THREE.LineBasicMaterial(colorCableBCP);     
+
                 materialCableBCP = new THREE.LineBasicMaterial(colorCableBCP);    //Создаем материал.
                 meshCableBCP = new THREE.Line(geometryCableBCP, materialCableBCP);  
+
                 meshCableBCP = new THREE.Line(geometryCableBCP, materialCableBCP); //Создаем объект сцены.
                 scene.add(meshCableBCP);  
+
                 scene.add(meshCableBCP); //Помещаем кабель на сцену.
 
              
 
              
                 geometryEndRackAC = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);         
+
                //Создаем наконечник стойки AC.
                 materialEndRackAC = new THREE.MeshBasicMaterial(colorEndRackAC);        
+
                 geometryEndRackAC = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);        //Создаем фигуру (сфера).
                 meshEndRackAC = new THREE.Mesh(geometryEndRackAC, materialEndRackAC);     
+
                 materialEndRackAC = new THREE.MeshBasicMaterial(colorEndRackAC);         //Создаем материал.
 +
                 meshEndRackAC = new THREE.Mesh(geometryEndRackAC, materialEndRackAC);    //Создаем объект сцены.
 +
                //Задаем положение центра наконечника.
 
                 meshEndRackAC.position.x = Math.cos(ALPHA) * LENGTH_AB;
 
                 meshEndRackAC.position.x = Math.cos(ALPHA) * LENGTH_AB;
 
                 meshEndRackAC.position.y = LENGTH_AB;
 
                 meshEndRackAC.position.y = LENGTH_AB;
 
                 meshEndRackAC.position.z = -Math.sin(ALPHA) * LENGTH_AB;
 
                 meshEndRackAC.position.z = -Math.sin(ALPHA) * LENGTH_AB;
                 scene.add(meshEndRackAC);  
+
                 scene.add(meshEndRackAC); //Помещаем наконечник на сцену.
 
                  
 
                  
                 geometryCargoP = new THREE.BoxGeometry(4, 2, 4);  
+
                //Создаем груз.
                 materialCargoP = new THREE.MeshBasicMaterial(colorCargoP);       
+
                 geometryCargoP = new THREE.BoxGeometry(4, 2, 4); //Создаем фигуру (параллелипипед.).
                 meshCargoP = new THREE.Mesh(geometryCargoP, materialCargoP);     
+
                 materialCargoP = new THREE.MeshBasicMaterial(colorCargoP);      //Создаем материал.
 +
                 meshCargoP = new THREE.Mesh(geometryCargoP, materialCargoP);    //Создаем объект сцены.
 +
                //Задаем положение центра груза.
 
                 meshCargoP.position.x = Math.cos(ALPHA) * (LENGTH_AB + RADIUS_RACK);
 
                 meshCargoP.position.x = Math.cos(ALPHA) * (LENGTH_AB + RADIUS_RACK);
 
                 meshCargoP.position.y = LENGTH_AB / 2;
 
                 meshCargoP.position.y = LENGTH_AB / 2;
 
                 meshCargoP.position.z = -Math.sin(ALPHA) * (LENGTH_AB + RADIUS_RACK);
 
                 meshCargoP.position.z = -Math.sin(ALPHA) * (LENGTH_AB + RADIUS_RACK);
 
                  
 
                  
                 scene.add(meshCargoP);  
+
                 scene.add(meshCargoP); //Помещаем груз на сцену.
 
                  
 
                  
 +
                //Если вектора усилий нужно отображать.
 
                 if(panelControlOptions.visibleEffort == true) {
 
                 if(panelControlOptions.visibleEffort == true) {
                     var tmp = -WEIGHT_P * Math.sqrt(2) * Math.cos(ALPHA);
+
                     var tmp = -WEIGHT_P * Math.sqrt(2) * Math.cos(ALPHA); //Усилие на стойку AB.
 +
                    //Создаем вектор усилия стойки AB.
 
                     vectorEffortAB = new THREE.ArrowHelper(
 
                     vectorEffortAB = new THREE.ArrowHelper(
                         new THREE.Vector3(0, (tmp < 0) ? -1 : 0, 0),                               
+
                         new THREE.Vector3(0, (tmp < 0) ? -1 : 0, 0),                              //Направление.
                         new THREE.Vector3(0, (tmp < 0) ? (-LENGTH_AB / 2) : (LENGTH_AB / 2), 0),   
+
                         new THREE.Vector3(0, (tmp < 0) ? (-LENGTH_AB / 2) : (LENGTH_AB / 2), 0),  //Координата начала (относительно центра стойки).
                         Math.abs(tmp),                                                             
+
                         Math.abs(tmp),                                                            //Длина.
                         colorEffortAB                                                             
+
                         colorEffortAB                                                            //Цвет.
 
                     );
 
                     );
  
                     meshRackAB.add(vectorEffortAB);
+
                     meshRackAB.add(vectorEffortAB); //Добавляем вектор усилия к стойке AB.
                     var tmp = WEIGHT_P * (Math.cos(ALPHA) - Math.sin(ALPHA));
+
 
 +
                     var tmp = WEIGHT_P * (Math.cos(ALPHA) - Math.sin(ALPHA)); //Усилие на стойку BD.
 +
                    //Создаем вектор усилия стойки BD.
 
                     vectorEffortBD = new THREE.ArrowHelper(
 
                     vectorEffortBD = new THREE.ArrowHelper(
                         new THREE.Vector3(0, (tmp < 0) ? -1 : 1, 0),                                                           
+
                         new THREE.Vector3(0, (tmp < 0) ? -1 : 1, 0),                                                          //Направление.
                         new THREE.Vector3(0, (tmp < 0) ? -(Math.sqrt(2) * LENGTH_AB / 2) : (Math.sqrt(2) * LENGTH_AB / 2), 0),  
+
                         new THREE.Vector3(0, (tmp < 0) ? -(Math.sqrt(2) * LENGTH_AB / 2) : (Math.sqrt(2) * LENGTH_AB / 2), 0), //Координата начала (относительно центра стойки).
                         Math.abs(tmp),                                                                                      
+
                         Math.abs(tmp),                                                                                         //Длина.
                         colorEffortBD                                                                                        
+
                         colorEffortBD                                                                                         //Цвет.
 
                     );
 
                     );
  
                     meshRackBD.add(vectorEffortBD);  
+
                     meshRackBD.add(vectorEffortBD); //Добавляем вектор усилия к стойке BD.
  
                     var tmp = WEIGHT_P * (Math.cos(ALPHA) + Math.sin(ALPHA));  
+
                     var tmp = WEIGHT_P * (Math.cos(ALPHA) + Math.sin(ALPHA)); //Усилие на стойку BE.
 +
                    //Создаем вектор усилия стойки BE.
 
                     vectorEffortBE = new THREE.ArrowHelper(
 
                     vectorEffortBE = new THREE.ArrowHelper(
                         new THREE.Vector3(0, (tmp < 0) ? -1 : 1, 0),                                                           
+
                         new THREE.Vector3(0, (tmp < 0) ? -1 : 1, 0),                                                          //Направление.
                         new THREE.Vector3(0, (tmp < 0) ? -(Math.sqrt(2) * LENGTH_AB / 2) : (Math.sqrt(2) * LENGTH_AB / 2), 0),  
+
                         new THREE.Vector3(0, (tmp < 0) ? -(Math.sqrt(2) * LENGTH_AB / 2) : (Math.sqrt(2) * LENGTH_AB / 2), 0), //Координата начала (относительно центра стойки).
                         Math.abs(tmp),                                                                                         
+
                         Math.abs(tmp),                                                                                        //Длина.
                         colorEffortBE                                                                                           
+
                         colorEffortBE                                                                                          //Цвет.
 
                     );
 
                     );
  
                     meshRackBE.add(vectorEffortBE);
+
                     meshRackBE.add(vectorEffortBE); //Добавляем вектор усилия к стойке BE.
 
                 } else {
 
                 } else {
 
                     vectorEffortAB = null;
 
                     vectorEffortAB = null;
Строка 307: Строка 356:
 
                 }
 
                 }
 
                  
 
                  
                 renderer.render(scene, camera);  
+
                 renderer.render(scene, camera); //Рендинг сцены.
 
             }
 
             }
 
              
 
              
 +
            //Функция перерисовки элементов крана на сцене.
 
             function redrawCraneElements() {
 
             function redrawCraneElements() {
                 scene.remove(meshRackAC);     
+
                //Удаляем динамические элементы со сцены.
                 scene.remove(meshCableBCP);   
+
                 scene.remove(meshRackAC);    //Удаление стойки AC.
                 scene.remove(meshEndRackAC);  
+
                 scene.remove(meshCableBCP);  //Удаление троса.
                 scene.remove(meshCargoP);     
+
                 scene.remove(meshEndRackAC); //Удаление наконечника стойки AC.
                 if (vectorEffortAB != null) meshRackAB.remove(vectorEffortAB);  
+
                 scene.remove(meshCargoP);    //Удаление груза.
                 if (vectorEffortBD != null) meshRackBD.remove(vectorEffortBD);  
+
                 if (vectorEffortAB != null) meshRackAB.remove(vectorEffortAB); //Удалили вектор усилия со стойки AB.
                 if (vectorEffortBE != null) meshRackBE.remove(vectorEffortBE);  
+
                 if (vectorEffortBD != null) meshRackBD.remove(vectorEffortBD); //Удалили вектор усилия со стойки BD.
 +
                 if (vectorEffortBE != null) meshRackBE.remove(vectorEffortBE); //Удалили вектор усилия со стойки BE.
 
                  
 
                  
 
                  
 
                  
 +
                //Добавляем динамические элементы на сцену.
 
                 drawDynamicCraneElements();
 
                 drawDynamicCraneElements();
 
             }
 
             }
 
              
 
              
 
              
 
              
              
+
             //Функция рендеринга, вызывается браузером через равные интервалы времени, для
 +
            //перерисовки сцены.
 
             function render() {
 
             function render() {
 
                 statFPS.update();
 
                 statFPS.update();
 
                  
 
                  
                 requestAnimationFrame(render);   
+
                 requestAnimationFrame(render);  //Вызвать эту же функцию для рендинга в следующий момент времени (момент времени зависит от браузера).
                 renderer.render(scene, camera);  
+
                 renderer.render(scene, camera); //Рендинг сцены.
 
             }
 
             }
 
              
 
              
 +
            //Функция, которая вызывается, когда был изменен размер окна.
 
             function changeSizeWindow() {
 
             function changeSizeWindow() {
 
                 camera.aspect=window.innerWidth/window.innerHeight;
 
                 camera.aspect=window.innerWidth/window.innerHeight;
Строка 338: Строка 392:
 
             }
 
             }
 
              
 
              
 +
            //Функция, которая создает объект: для отображения FPS.
 
             function initStatFPS()
 
             function initStatFPS()
 
             {
 
             {
 
                 var stats=new Stats();  
 
                 var stats=new Stats();  
 
                 stats.setMode(0);  
 
                 stats.setMode(0);  
 +
               
 
                 stats.domElement.style.position='0px';
 
                 stats.domElement.style.position='0px';
 
                 stats.domElement.style.left='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);
 
                 return stats;
 
                 return stats;
Вам запрещено изменять защиту статьи. 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:

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