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

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
 
+
'''''Курсовой проект по информатике'''''
'''Визуализация 3D-задачи по статике на JavaScript'''
 
  
 
'''Исполнитель: [[Лобанов Илья]]
 
'''Исполнитель: [[Лобанов Илья]]
Строка 6: Строка 5:
 
'''Группа:''' 23604/1
 
'''Группа:''' 23604/1
  
==Задача==
 
  
  
[[File:forprog2.PNG]]
+
==Задача==
[[File:forprog.PNG]]
 
 
 
==Решение задачи==
 
 
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Lobanov_I_Y/Mesherskiy/task.html |width=830 |height=830 |border=0 }}
 
 
 
<div class="mw-collapsible mw-collapsed" style="width:100%" >
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
 
 
<html>
 
    <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/OrbitControls.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/stats.min.js"></script>
 
    </head>
 
    <body>
 
        <div id = "WebGL"> </div>
 
        <div id = "Stats-output"></div>
 
        <script>
 
           
 
            var scene,   
 
                camera,   
 
                renderer; 
 
           
 
            var LENGTH_AB = 20; 
 
            var RADIUS_RACK = 1;
 
            var statFPS;       
 
           
 
            var panelControlOptions;
 
            var panelInfoEffort;   
 
            var gui;               
 
           
 
            //Стойка AB.
 
            var geometryRackAB, 
 
                materialRackAB, 
 
                meshRackAB,     
 
                colorRackAB = {color: 0x6A5ACD};
 
           
 
            //Стойка BD.
 
            var geometryRackBD, 
 
                materialRackBD, 
 
                meshRackBD,     
 
                colorRackBD = {color: 0x6A5ACD};
 
           
 
            //Стойка BE.
 
            var geometryRackBE, 
 
                materialRackBE, 
 
                meshRackBE,     
 
                colorRackBE = {color: 0x6A5ACD};           
 
            //Стойка AC.
 
            var geometryRackAC,
 
                materialRackAC, 
 
                meshRackAC,     
 
                colorRackAC = {color: 0x6A5ACD};
 
           
 
            //Шарнир в точке B.
 
            var geometryHingeB, 
 
                materialHingeB, 
 
                meshHingeB,     
 
                colorHingeB = {color: 0x6A5ACD};
 
           
 
            //Шарнир в точке A.
 
            var geometryHingeA, 
 
                materialHingeA, 
 
                meshHingeA,     
 
                colorHingeA = {color: 0x6A5ACD};
 
           
 
            //Шарнир в точке D.
 
            var geometryHingeD, 
 
                materialHingeD, 
 
                meshHingeD,     
 
                colorHingeD = {color: 0x6A5ACD};
 
           
 
            //Шарнир в точке E.
 
            var geometryHingeE, 
 
                materialHingeE, 
 
                meshHingeE,     
 
                colorHingeE = {color: 0x6A5ACD};
 
           
 
            //Трос.
 
            var geometryCableBCP, 
 
                materialCableBCP, 
 
                meshCableBCP,     
 
                colorCableBCP = {color: 0x000000};
 
           
 
           
 
            //Наконечник стойки AC.
 
            var geometryEndRackAC,
 
                materialEndRackAC,
 
                meshEndRackAC,   
 
                colorEndRackAC = {color: 0x6A5ACD};
 
           
 
            //Груз.
 
            var geometryCargoP,
 
                materialCargoP,
 
                meshCargoP,   
 
                colorCargoP = {color: 0xFF4500};
 
           
 
           
 
            var vectorEffortAB,         
 
                colorEffortAB = 0xFF0000; 
 
           
 
           
 
            var vectorEffortBD,           
 
                colorEffortBD = 0xFF0000;
 
           
 
         
 
            var vectorEffortBE,           
 
                colorEffortBE = 0xFF0000; 
 
           
 
            //Функции инициализации
 
            function init() {
 
                scene = new THREE.Scene();
 
                camera = new THREE.PerspectiveCamera(100, window.innerWidth / window.innerHeight, 0.1, 100);
 
                renderer = new THREE.WebGLRenderer();
 
                renderer.setSize(window.innerWidth, window.innerHeight);
 
                renderer.setClearColor(0xEEEEEE);
 
                //renderer.shadowMap.enabled=true;
 
 
 
                document.getElementById("WebGL").appendChild(renderer.domElement);
 
               
 
                camera.position.x = 0;
 
                camera.position.y = 0;
 
                camera.position.z = 40;
 
                camera.lookAt(0, 0, 0);
 
               
 
                axes = new THREE.AxisHelper(50);
 
                scene.add(axes);
 
 
 
                control = new THREE.OrbitControls(camera,renderer.domElement);
 
               
 
                panelControlOptions = new function() {
 
                    this.alpha = 0.0; 
 
                    this.weightP = 10.0;
 
                    this.visibleEffort = true;
 
                }
 
               
 
                panelInfoEffort = new function() {
 
                    this.Sbd = '0';
 
                    this.Sbe = '0';
 
                    this.Sab = '0';
 
                }
 
                gui = new dat.GUI();
 
                gui.add(panelControlOptions, 'alpha', -90, 90).onChange(redrawCraneElements);
 
                gui.add(panelControlOptions, 'weightP', 1, 100).onChange(redrawCraneElements);
 
                gui.add(panelControlOptions, 'visibleEffort').onChange(redrawCraneElements);
 
               
 
                gui.add(panelInfoEffort, 'Sbd').listen();
 
                gui.add(panelInfoEffort, 'Sbe').listen();
 
                gui.add(panelInfoEffort, 'Sab').listen();
 
               
 
                drawStaticCraneElements(); 
 
                drawDynamicCraneElements();
 
   
 
                statFPS = initStatFPS();
 
                render();
 
   
 
                window.addEventListener('resize',changeSizeWindow,false);
 
            }
 
           
 
            function drawStaticCraneElements() {
 
                geometryRackAB = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, LENGTH_AB, 32);
 
                materialRackAB = new THREE.MeshBasicMaterial(colorRackAB);                           
 
                meshRackAB = new THREE.Mesh(geometryRackAB, materialRackAB);                       
 
                meshRackAB.position.x = 0;
 
                meshRackAB.position.y = LENGTH_AB / 2;
 
                meshRackAB.position.z = 0;
 
                scene.add(meshRackAB);
 
               
 
                geometryRackBD = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32);
 
                materialRackBD = new THREE.MeshBasicMaterial(colorRackBD);                                         
 
                meshRackBD = new THREE.Mesh(geometryRackBD, materialRackBD);                                       
 
                meshRackBD.position.x = -Math.cos(Math.PI / 4) * (LENGTH_AB / 2);
 
                meshRackBD.position.y = LENGTH_AB / 2;
 
                meshRackBD.position.z = Math.sin(Math.PI / 4) * (LENGTH_AB / 2);
 
                meshRackBD.rotation.y = Math.PI / 4;
 
                meshRackBD.rotation.z = -Math.PI / 4;
 
                scene.add(meshRackBD);
 
               
 
                geometryRackBE = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32);
 
                materialRackBE = new THREE.MeshBasicMaterial(colorRackBE);                                         
 
                meshRackBE = new THREE.Mesh(geometryRackBE, materialRackBE);                                       
 
                meshRackBE.position.x = -Math.cos(Math.PI / 4) * (LENGTH_AB / 2);
 
                meshRackBE.position.y = LENGTH_AB / 2;
 
                meshRackBE.position.z = -Math.sin(Math.PI / 4) * (LENGTH_AB / 2);
 
                meshRackBE.rotation.y = -Math.PI / 4;
 
                meshRackBE.rotation.z = -Math.PI / 4;
 
                scene.add(meshRackBE);
 
               
 
                geometryHingeB = new THREE.SphereGeometry(RADIUS_RACK, 32, 32); 
 
                materialHingeB = new THREE.MeshBasicMaterial(colorHingeB);     
 
                meshHingeB = new THREE.Mesh(geometryHingeB, materialHingeB);   
 
                meshHingeB.position.y = LENGTH_AB;
 
                scene.add(meshHingeB);
 
               
 
                geometryHingeA = new THREE.SphereGeometry(RADIUS_RACK, 32, 32); 
 
                materialHingeA = new THREE.MeshBasicMaterial(colorHingeA);     
 
                meshHingeA = new THREE.Mesh(geometryHingeA, materialHingeA);   
 
                scene.add(meshHingeA);
 
               
 
                geometryHingeD = new THREE.SphereGeometry(RADIUS_RACK, 32, 32); 
 
                materialHingeD = new THREE.MeshBasicMaterial(colorHingeD);     
 
                meshHingeD = new THREE.Mesh(geometryHingeD, materialHingeD);   
 
                meshHingeD.position.x = -LENGTH_AB * Math.cos(Math.PI / 4);
 
                meshHingeD.position.z = LENGTH_AB * Math.sin(Math.PI / 4);
 
                scene.add(meshHingeD);
 
               
 
                geometryHingeE = new THREE.SphereGeometry(RADIUS_RACK, 32, 32); 
 
                materialHingeE = new THREE.MeshBasicMaterial(colorHingeE);     
 
                meshHingeE = new THREE.Mesh(geometryHingeE, materialHingeE);   
 
                meshHingeE.position.x = -LENGTH_AB * Math.cos(Math.PI / 4);
 
                meshHingeE.position.z = -LENGTH_AB * Math.sin(Math.PI / 4);
 
                scene.add(meshHingeE);
 
               
 
                renderer.render(scene, camera);
 
            }
 
            function drawDynamicCraneElements() {
 
                var ALPHA = panelControlOptions.alpha / 180 * Math.PI;
 
                var WEIGHT_P = panelControlOptions.weightP;
 
               
 
                panelInfoEffort.Sbd = 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);
 
               
 
                geometryRackAC = new THREE.CylinderGeometry(RADIUS_RACK, RADIUS_RACK, Math.sqrt(2) * LENGTH_AB, 32);
 
                materialRackAC = new THREE.MeshBasicMaterial(colorRackAC);                                         
 
                meshRackAC = new THREE.Mesh(geometryRackAC, materialRackAC);                                       
 
                meshRackAC.position.x = Math.cos(ALPHA) * (LENGTH_AB / 2);
 
                meshRackAC.position.y = LENGTH_AB / 2;
 
                meshRackAC.position.z = -Math.sin(ALPHA) * (LENGTH_AB / 2);
 
                meshRackAC.rotation.y = ALPHA;
 
                meshRackAC.rotation.z = -Math.PI / 4;
 
                scene.add(meshRackAC);
 
               
 
                geometryCableBCP = new THREE.Geometry();
 
                geometryCableBCP.vertices.push(
 
                    new THREE.Vector3(0, LENGTH_AB + RADIUS_RACK, 0),
 
                    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 / 2, -Math.sin(ALPHA) * (LENGTH_AB + RADIUS_RACK)));         
 
               
 
                materialCableBCP = new THREE.LineBasicMaterial(colorCableBCP);   
 
                meshCableBCP = new THREE.Line(geometryCableBCP, materialCableBCP);
 
                scene.add(meshCableBCP);
 
           
 
                geometryEndRackAC = new THREE.SphereGeometry(RADIUS_RACK, 32, 32);       
 
                materialEndRackAC = new THREE.MeshBasicMaterial(colorEndRackAC);       
 
                meshEndRackAC = new THREE.Mesh(geometryEndRackAC, materialEndRackAC);   
 
                meshEndRackAC.position.x = Math.cos(ALPHA) * LENGTH_AB;
 
                meshEndRackAC.position.y = LENGTH_AB;
 
                meshEndRackAC.position.z = -Math.sin(ALPHA) * LENGTH_AB;
 
                scene.add(meshEndRackAC);
 
               
 
                geometryCargoP = new THREE.BoxGeometry(4, 2, 4);
 
                materialCargoP = new THREE.MeshBasicMaterial(colorCargoP);     
 
                meshCargoP = new THREE.Mesh(geometryCargoP, materialCargoP);   
 
                meshCargoP.position.x = Math.cos(ALPHA) * (LENGTH_AB + RADIUS_RACK);
 
                meshCargoP.position.y = LENGTH_AB / 2;
 
                meshCargoP.position.z = -Math.sin(ALPHA) * (LENGTH_AB + RADIUS_RACK);
 
               
 
                scene.add(meshCargoP);
 
               
 
                if(panelControlOptions.visibleEffort == true) {
 
                    var tmp = -WEIGHT_P * Math.sqrt(2) * Math.cos(ALPHA);
 
                    vectorEffortAB = new THREE.ArrowHelper(
 
                        new THREE.Vector3(0, (tmp < 0) ? -1 : 0, 0),                             
 
                        new THREE.Vector3(0, (tmp < 0) ? (-LENGTH_AB / 2) : (LENGTH_AB / 2), 0), 
 
                        Math.abs(tmp),                                                           
 
                        colorEffortAB                                                           
 
                    );
 
 
 
                    meshRackAB.add(vectorEffortAB);
 
                    var tmp = WEIGHT_P * (Math.cos(ALPHA) - Math.sin(ALPHA));
 
                    vectorEffortBD = new THREE.ArrowHelper(
 
                        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),
 
                        Math.abs(tmp),                                                                                       
 
                        colorEffortBD                                                                                       
 
                    );
 
 
 
                    meshRackBD.add(vectorEffortBD);
 
 
 
                    var tmp = WEIGHT_P * (Math.cos(ALPHA) + Math.sin(ALPHA));
 
                    vectorEffortBE = new THREE.ArrowHelper(
 
                        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),
 
                        Math.abs(tmp),                                                                                       
 
                        colorEffortBE                                                                                         
 
                    );
 
  
                    meshRackBE.add(vectorEffortBE);
+
[[:File:_uB98cczQ-0.png]]
                } else {
 
                    vectorEffortAB = null;
 
                    vectorEffortBD = null;
 
                    vectorEffortBE = null;
 
                }
 
               
 
                renderer.render(scene, camera);
 
            }
 
           
 
            function redrawCraneElements() {
 
                scene.remove(meshRackAC);   
 
                scene.remove(meshCableBCP); 
 
                scene.remove(meshEndRackAC);
 
                scene.remove(meshCargoP);   
 
                if (vectorEffortAB != null) meshRackAB.remove(vectorEffortAB);
 
                if (vectorEffortBD != null) meshRackBD.remove(vectorEffortBD);
 
                if (vectorEffortBE != null) meshRackBE.remove(vectorEffortBE);
 
               
 
               
 
                drawDynamicCraneElements();
 
            }
 
           
 
           
 
           
 
            function render() {
 
                statFPS.update();
 
               
 
                requestAnimationFrame(render); 
 
                renderer.render(scene, camera);
 
            }
 
           
 
            function changeSizeWindow() {
 
                camera.aspect=window.innerWidth/window.innerHeight;
 
                camera.updateProjectionMatrix();
 
                renderer.setSize(window.innerWidth,window.innerHeight);
 
            }
 
           
 
            function initStatFPS()
 
            {
 
                var stats=new Stats();
 
                stats.setMode(0);
 
                stats.domElement.style.position='0px';
 
                stats.domElement.style.left='0px';
 
                stats.domElement.style.top='0px';
 
                document.getElementById("Stats-output").appendChild(stats.domElement);
 
                return stats;
 
            }
 
            window.onload = init;
 
        </script>
 
    </body>
 
</html>
 
Вам запрещено изменять защиту статьи. 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:

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