Редактирование: Мещерский. Задача 5.8
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 82: | Строка 82: | ||
controls = new function() // создаем переключатели, позволяющие изменять входные параметры | controls = new function() // создаем переключатели, позволяющие изменять входные параметры | ||
{ | { | ||
− | this. | + | this.weight1 = 30; // вес первого тела |
− | this. | + | this.weight2 = 10; // вес второго тела |
− | this. | + | this.weight3 = 60; // вес третьего тела |
− | this. | + | this.coefficient1 = 0.25; // коэффициент трения первого тела |
− | this. | + | this.coefficient2 = 0.1; // коэффициент трения второго тела |
− | this. | + | this.coefficient3 = 0.5; // коэффициент трения третьего тела |
this.displayForces = true; // модуль отображения задачи | this.displayForces = true; // модуль отображения задачи | ||
this.angle = "angle = "; // вывод полученных в ходе решения задачи значений | this.angle = "angle = "; // вывод полученных в ходе решения задачи значений | ||
− | this. | + | this.t12 = "T12 = "; |
− | this. | + | this.t13 = "T13 = "; |
− | |||
} | } | ||
var gui = new dat.GUI(); // позволяем менять каждый из параметров в определенном диапазоне, в случае изменения вызываем функцию, перестраивающую выводимую на экран картинку | var gui = new dat.GUI(); // позволяем менять каждый из параметров в определенном диапазоне, в случае изменения вызываем функцию, перестраивающую выводимую на экран картинку | ||
− | gui.add(controls, ' | + | gui.add(controls, 'weight1',0,100).onChange(ReDraw); |
− | gui.add(controls, ' | + | gui.add(controls, 'weight2',0,100).onChange(ReDraw); |
− | gui.add(controls, ' | + | gui.add(controls, 'weight3',0,100).onChange(ReDraw); |
− | gui.add(controls, ' | + | gui.add(controls, 'coefficient1',0,1).onChange(ReDraw); |
− | gui.add(controls, ' | + | gui.add(controls, 'coefficient2',0,1).onChange(ReDraw); |
− | gui.add(controls, ' | + | gui.add(controls, 'coefficient3',0,1).onChange(ReDraw); |
gui.add(controls, 'displayForces').onChange(Change); // параметр, определяющий вариант отображения задачи (с отображением сил и без отображения) | gui.add(controls, 'displayForces').onChange(Change); // параметр, определяющий вариант отображения задачи (с отображением сил и без отображения) | ||
gui.add(controls, 'angle').listen(); | gui.add(controls, 'angle').listen(); | ||
− | gui.add(controls, ' | + | gui.add(controls, 't12').listen(); |
− | gui.add(controls, ' | + | gui.add(controls, 't13').listen(); |
− | |||
stats = initStats(); | stats = initStats(); | ||
Строка 157: | Строка 155: | ||
plane.remove(c3); | plane.remove(c3); | ||
scene.remove(plane); | scene.remove(plane); | ||
− | P1 = controls. | + | P1 = controls.weight1; // меняем значения параметров на те, что ввел пользователь |
− | P2 = controls. | + | P2 = controls.weight2; |
− | P3 = controls. | + | P3 = controls.weight3; |
− | f1 = controls. | + | f1 = controls.coefficient1; |
− | f2 = controls. | + | f2 = controls.coefficient2; |
− | f3 = controls. | + | f3 = controls.coefficient3; |
Draw(); | Draw(); | ||
} | } | ||
Строка 170: | Строка 168: | ||
al = Math.atan((P1*f1+P2*f2+P3*f3)/(P1+P2+P3)); | al = Math.atan((P1*f1+P2*f2+P3*f3)/(P1+P2+P3)); | ||
controls.angle = "angle = " + al; | controls.angle = "angle = " + al; | ||
− | |||
//alert (al); | //alert (al); | ||
Строка 245: | Строка 242: | ||
c1.add( arr1_3 ); // прикрепляем к нужному телу | c1.add( arr1_3 ); // прикрепляем к нужному телу | ||
− | controls. | + | controls.t13 = "T13 = " + P3*(f3-Math.tan(al)); // вывод решения на экран |
var ar1_2 = new THREE.Vector3(-1,0,0); // создаем геометрию вектора, отображающего натяжение нити, соединяющей первое и второе тело | var ar1_2 = new THREE.Vector3(-1,0,0); // создаем геометрию вектора, отображающего натяжение нити, соединяющей первое и второе тело | ||
Строка 251: | Строка 248: | ||
c1.add( arr1_2 ); // прикрепляем к нужному телу | c1.add( arr1_2 ); // прикрепляем к нужному телу | ||
− | controls. | + | controls.t12 = "T12 = " + P2*(Math.tan(al)-f2); // вывод решения на экран |
arr1_t = new THREE.ArrowHelper( ar1_3, origin, f1*length1, hex3); // создаем вектор, отображающий силу трения | arr1_t = new THREE.ArrowHelper( ar1_3, origin, f1*length1, hex3); // создаем вектор, отображающий силу трения | ||
Строка 302: | Строка 299: | ||
{ | { | ||
stats.update(); | stats.update(); | ||
− | P1 = controls. | + | P1 = controls.weight1; |
− | P2 = controls. | + | P2 = controls.weight2; |
− | P3 = controls. | + | P3 = controls.weight3; |
− | f1 = controls. | + | f1 = controls.coefficient1; |
− | f2 = controls. | + | f2 = controls.coefficient2; |
− | f3 = controls. | + | f3 = controls.coefficient3; |
requestAnimationFrame(renderScene); | requestAnimationFrame(renderScene); | ||
renderer.render(scene,camera); | renderer.render(scene,camera); |