Редактирование: КП: Прицельный бильярд

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 68: Строка 68:
 
     var T0 = 1;                          // масштаб времени (период колебаний исходной системы)
 
     var T0 = 1;                          // масштаб времени (период колебаний исходной системы)
 
     var a0 = 1;        // масштаб расстояния (диаметр шара)
 
     var a0 = 1;        // масштаб расстояния (диаметр шара)
     var q = 90;                    // угол  
+
     var q = -90;                    // угол  
 
    
 
    
  
Строка 153: Строка 153:
 
             }
 
             }
  
             for (var i = 0; i < balls.length; i++) { // пеерсчет взаимодействия между шарами
+
             for (var i = 0; i < balls.length; i++) {
  
  
 
     //попадание в лузу  
 
     //попадание в лузу  
 
      
 
      
       if ((balls[i].x >= (300/scale-r/2))  && (balls[i].y >= (300/scale-r/2)) && (balls[i].y <= (300/scale+r/2))) {balls.splice(i, 1)}; // когда координаты шара совпадают с координатами, записанными в условии цикла, шар удаляется с поля при помощи balls.splice
+
       if ((balls[i].x >= (300/scale-r))  && (balls[i].y >= (300/scale-r)) && (balls[i].y <= (300/scale+r))) {balls.splice(i, 1)};
     if ((balls[i].x >= (300/scale-r/2))  && (balls[i].y <= (r/2))) {balls.splice(i, 1)};
+
     if ((balls[i].x >= (300/scale-r))  && (balls[i].y <= (r))) {balls.splice(i, 1)};
     if ((balls[i].x >= (300/scale-r/2))  && (balls[i].y >= (600/scale -r/2))) {balls.splice(i, 1)};
+
     if ((balls[i].x >= (300/scale-r))  && (balls[i].y >= (600/scale -r))) {balls.splice(i, 1)};
     if ((balls[i].x <= (r/2))  && (balls[i].y >= (600/scale -r/2))) {balls.splice(i, 1)};
+
     if ((balls[i].x <= (r))  && (balls[i].y >= (600/scale -r))) {balls.splice(i, 1)};
     if ((balls[i].x <= (r/2))  && (balls[i].y >= (300/scale-r/2)) && (balls[i].y <= (300/scale+r/2))) {balls.splice(i, 1)};
+
     if ((balls[i].x <= (r))  && (balls[i].y >= (300/scale-r)) && (balls[i].y <= (300/scale+r))) {balls.splice(i, 1)};
     if ((balls[i].x <= (r/2))  && (balls[i].y <= (r/2))) {balls.splice(i, 1)};   
+
     if ((balls[i].x <= (r))  && (balls[i].y <= (r))) {balls.splice(i, 1)};   
  
 
                 // расчет взаимодействия производится со всеми следующими шарами в массиве,
 
                 // расчет взаимодействия производится со всеми следующими шарами в массиве,
Строка 195: Строка 195:
 
                 }
 
                 }
  
                 if (b.y + r > h) { b.fy += -Cwall * (b.y + r - h) - Bwall * b.vy; }   // рассчет взаимодействия со стенками : когда координаты шара совпадают с координатами в условии цикла, шару придается скорость и направление
+
                 if (b.y + r > h) { b.fy += -Cwall * (b.y + r - h) - Bwall * b.vy; }
 
                 if (b.y - r < 0) { b.fy += -Cwall * (b.y - r) - Bwall * b.vy;}
 
                 if (b.y - r < 0) { b.fy += -Cwall * (b.y - r) - Bwall * b.vy;}
 
                 if (b.x + r > w) { b.fx += -Cwall * (b.x + r - w) - Bwall * b.vx; }
 
                 if (b.x + r > w) { b.fx += -Cwall * (b.x + r - w) - Bwall * b.vx; }
Строка 211: Строка 211:
 
     var rScaleShift = r * scale / 5;        // ___в целях оптимизации___
 
     var rScaleShift = r * scale / 5;        // ___в целях оптимизации___
 
   var line ;
 
   var line ;
   var radi = 30;             // линия которая показывает предполагаему траекторию "битка"
+
   var radi = 30;
 +
  var radi2 = 5;
 
    
 
    
 
     function draw() {
 
     function draw() {
 
         context.clearRect(0, 0, w * scale, h * scale);      // очистить экран
 
         context.clearRect(0, 0, w * scale, h * scale);      // очистить экран
         for (var i = 1; i < balls.length; i++){
+
         for (var i = 0; i < balls.length; i++){
 
             var xS = balls[i].x * scale;          var yS = balls[i].y * scale;
 
             var xS = balls[i].x * scale;          var yS = balls[i].y * scale;
 
             // расчет градиента нужно проводить для каждого шара
 
             // расчет градиента нужно проводить для каждого шара
Строка 228: Строка 229:
 
             context.fill();
 
             context.fill();
 
         }
 
         }
     for (var i = 0; i < 1; i++){
+
     for (var i = 15; i < balls.length; i++){
 
             var xS = balls[i].x * scale;          var yS = balls[i].y * scale;
 
             var xS = balls[i].x * scale;          var yS = balls[i].y * scale;
 
             // расчет градиента нужно проводить для каждого шара
 
             // расчет градиента нужно проводить для каждого шара
Строка 247: Строка 248:
 
       context.strokeStyle="#fff506";
 
       context.strokeStyle="#fff506";
 
             context.beginPath();
 
             context.beginPath();
             context.moveTo(balls[0].x * scale, balls[0].y * scale);                                                                                                                                                         
+
             context.moveTo(balls[15].x * scale, balls[15].y * scale);                                                                                                                                                         
       context.lineTo(radi*v0*Math.cos(q*Pi/180) + balls[0].x * scale,radi*v0*Math.sin(q*Pi/180)+balls[0].y * scale);
+
       context.lineTo(radi*v0*Math.cos(q*Pi/180) + balls[15].x * scale,radi*v0*Math.sin(q*Pi/180)+balls[15].y * scale);
 
             context.stroke();
 
             context.stroke();
 
      
 
      
  
    // прорисовка луз
 
 
     // verh lev
 
     // verh lev
 
   context.lineWidth="3";
 
   context.lineWidth="3";
Строка 336: Строка 336:
  
 
     // Запуск системы
 
     // Запуск системы
                      // добавляем 20 частиц, сдвинув их от стен
 
    addNewBall(16*w/32, 16*h/32 );
 
 
     addNewBall(16*w/32, 8*h/32 );   
 
     addNewBall(16*w/32, 8*h/32 );   
 
     addNewBall(16*w/32 - r,  8*h/32 - 1.7321*r);   
 
     addNewBall(16*w/32 - r,  8*h/32 - 1.7321*r);   
Строка 355: Строка 353:
 
     addNewBall(16*w/32, 16*h/32 );   
 
     addNewBall(16*w/32, 16*h/32 );   
 
      
 
      
   this.setSlider_01 = function(c) { q=-c ;}; // функция для слайдера угла
+
   this.setSlider_01 = function(c) { q=c ;}; // функция для слайдера угла
 
   this.setSlider_02 = function(c) { v0=c ;}; // функция для слайдера угла
 
   this.setSlider_02 = function(c) { v0=c ;}; // функция для слайдера угла
  
 
  // Настройка интерфейса
 
  // Настройка интерфейса
  
     slider_01.min = 0;              slider_01.max =360;
+
     slider_01.min = -360;              slider_01.max =180;
     slider_01.step = 0.5;
+
     slider_01.step = 0.1;
 
     slider_01.value = q;          // начальное значение ползунка должно задаваться после min и max
 
     slider_01.value = q;          // начальное значение ползунка должно задаваться после min и max
     text_01.value = Math.abs(q);
+
     text_01.value = -q;
 
     slider_02.min = 0;              slider_02.max = 10;
 
     slider_02.min = 0;              slider_02.max = 10;
 
     slider_02.step = 0.5;
 
     slider_02.step = 0.5;
Строка 373: Строка 371:
 
      
 
      
 
     this.newSystem = function() {
 
     this.newSystem = function() {
     balls[0].vx = v0* Math.cos(q*Pi/180);
+
     balls[15].vx = v0* Math.cos(q*Pi/180);
         balls[0].vy = v0* Math.sin(q*Pi/180);
+
         balls[15].vy = v0* Math.sin(q*Pi/180);
 
   }
 
   }
  
  this.newSystem1 = function() {
 
  for (var i = 20; i >= 0; i--)
 
  {balls.splice(i, 1)};
 
  addNewBall(16*w/32, 16*h/32 );
 
    addNewBall(16*w/32, 8*h/32 ); 
 
    addNewBall(16*w/32 - r,  8*h/32 - 1.7321*r); 
 
    addNewBall(16*w/32 + r,  8*h/32 - 1.7321*r );
 
    addNewBall(16*w/32,    8*h/32 - 2*1.7321*r );   
 
    addNewBall(16*w/32 - 2*r,  8*h/32 - 2*1.7321*r );
 
    addNewBall(16*w/32 + 2*r,  8*h/32 - 2*1.7321*r );
 
    addNewBall(16*w/32 + r,  8*h/32 - 3*1.7321*r );
 
    addNewBall(16*w/32 - r,  8*h/32 - 3*1.7321*r );
 
    addNewBall(16*w/32 + 3*r,  8*h/32 - 3*1.7321*r );
 
    addNewBall(16*w/32 - 3*r,  8*h/32 - 3*1.7321*r );
 
    addNewBall(16*w/32,    8*h/32 - 4*1.7321*r );
 
    addNewBall(16*w/32 - 2*r,  8*h/32 - 4*1.7321*r );
 
    addNewBall(16*w/32 + 2*r,  8*h/32 - 4*1.7321*r );
 
    addNewBall(16*w/32 - 4*r,  8*h/32 - 4*1.7321*r );
 
    addNewBall(16*w/32 + 4*r,  8*h/32 - 4*1.7321*r );
 
    addNewBall(16*w/32, 16*h/32 ); 
 
 
 
}
 
 
     setInterval(control, 1000 / fps);
 
     setInterval(control, 1000 / fps);
 
}
 
}
 
 
  
  
Строка 457: Строка 431:
  
 
[[Файл:WHVJA1.png|thumb|рис.1.Траектория разлета шаров при центральном разбиении пирамиды.|слева|250px]]
 
[[Файл:WHVJA1.png|thumb|рис.1.Траектория разлета шаров при центральном разбиении пирамиды.|слева|250px]]
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  
Вам запрещено изменять защиту статьи. 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:

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

Шаблоны, используемые на этой странице: