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

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 28: Строка 28:
 
== Программа для игры в Бильярд ==
 
== Программа для игры в Бильярд ==
 
Ниже приведена программа( созданная совместно с [[Булдаков Павел|Булдаковым Павлом]] на основании программы Динамика взаимодействующих частиц), в которой видно, что траектория разлета шаров схожа с расчетными траекториями полученными профессором [http://mathoverflow.net/questions/156263/perfectly-centered-break-of-a-perfectly-aligned-pool-ball-rack/156407#156407,_Джимом-Бэлк Джимом Белк] (рис.1). Взаимодействие между шарами описывается с помощью потенциала Леннарда-Джонса.
 
Ниже приведена программа( созданная совместно с [[Булдаков Павел|Булдаковым Павлом]] на основании программы Динамика взаимодействующих частиц), в которой видно, что траектория разлета шаров схожа с расчетными траекториями полученными профессором [http://mathoverflow.net/questions/156263/perfectly-centered-break-of-a-perfectly-aligned-pool-ball-rack/156407#156407,_Джимом-Бэлк Джимом Белк] (рис.1). Взаимодействие между шарами описывается с помощью потенциала Леннарда-Джонса.
 
<big><math>\varPi(r) = D\left[\left(\frac{a}{r}\right)^{12}-2\left(\frac{a}{r}\right)^{6}\right]</math></big>
 
 
<big><math>
 
\left\{
 
\begin{array}{ll}
 
F(r) = \frac{12D}{a}\left[\left(\frac a r\right)^{13}-\left(\frac a r\right)^{7}\right], \qquad & r<d; \\
 
F(r) = 0, \qquad & r > d; \\
 
\end{array}
 
\right.
 
</math></big>
 
 
где
 
 
<big><math>r</math></big> — расстояние между частицами,
 
 
<big><math>D</math></big> — энергия связи,
 
 
<big><math>a</math></big> — длина связи.
 
  
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Stepanov/Billyard1version.html |width=500|height=780 |border=0 }} {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Stepanov/rezkanew.html |with=500|height=780 |border=0 }}  
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Stepanov/Billyard1version.html |width=500|height=780 |border=0 }} {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Stepanov/rezkanew.html |with=500|height=780 |border=0 }}  
<div class="mw-collapsible mw-collapsed">
 
'''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content">
 
Файл '''"Billyard1version.js"'''
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
 
window.addEventListener("load", MainBalls, true);
 
function MainBalls(slider_01, text_01, slider_02, text_02) {
 
 
    // Предварительные установки
 
 
    var canvas = canvasBalls;
 
    var context = canvas.getContext("2d");                  // на context происходит рисование
 
    canvas.oncontextmenu = function (e) {return false;};    // блокировка контекстного меню
 
 
    var Pi = 3.1415926;                  // число "пи"
 
 
    var m0 = 1;                          // масштаб массы
 
    var T0 = 1;                          // масштаб времени (период колебаний исходной системы)
 
    var a0 = 1;        // масштаб расстояния (диаметр шара)
 
    var q = 90;                    // угол
 
 
 
 
    var g0 = a0 / T0 / T0;                // масштаб ускорения (ускорение, при котором за T0 будет пройдено расстояние a0)
 
    var k0 = 2 * Pi / T0;                // масштаб частоты
 
    var C0 = m0 * k0 * k0;                // масштаб жесткости
 
    var B0 = 2 * m0 * k0;                // масштаб вязкости
 
  var v0 = 1;      //начальная скорость
 
 
 
    // *** Задание физических параметров ***
 
 
    var Ny = 32;                          // число шаров, помещающихся по вертикали в окно (задает размер шара относительно размера окна)
 
    var m = 1 * m0;                      // масса
 
    var Cwall = 10 * C0;                  // жесткость стен
 
    var Cball = 0.1 * Cwall;              // жесткость между частицами
 
    var B = 0.008 * B0;                  // вязкость среды
 
    var Bwall = 0.03 * B0;                // вязкость на стенках
 
    var mg = 0.25 * m * g0;              // сила тяжести
 
    var r = 0.5 * a0;                    // радиус частицы в расчетных координатах
 
    var K = 0.85;                        // сила взаимодействия ограничивается значением, реализующимся при r/a = K
 
    var a = 2 * r;                        // равновесное расстояние между частицами
 
    var aCut = 2.00001 * r;              // радиус обрезания
 
 
    // *** Задание вычислительных параметров ***
 
 
    var fps = 50;                        // frames per second - число кадров в секунду (качечтво отображения)
 
    var spf = 100;                        // steps per frame  - число шагов интегрирования между кадрами (скорость расчета)
 
    var dt  = 0.045 * T0 / fps;          // шаг интегрирования (качество расчета)
 
 
    // Выполнение программы
 
 
    var scale = canvas.height / Ny / a0;  // масштабный коэффициент для перехода от расчетных к экранным координатам
 
    var r2 = r * r;                      // ___в целях оптимизации___
 
    var aCut2 = aCut * aCut;              // ___в целях оптимизации___
 
    var a2 = a * a;                      // ___в целях оптимизации___
 
    var D = a2 * Cball / 72;              // энергия связи между частицами
 
    var LJCoeff = 12 * D / a2;            // коэффициент для расчета потенциала Л-Дж
 
 
 
    var Ka = K * a;                      // ___в целях оптимизации___
 
    var K2a2 = K * K * a2;                // ___в целях оптимизации___
 
 
    var w = canvas.width / scale;          // ширина окна в расчетных координатах
 
    var h = canvas.height / scale;          // высота окна в расчетных координатах
 
 
    // Работа с массивом
 
 
    var balls = [];                            // массив шаров
 
    var addNewBall =  function(x, y) {
 
        // проверка - не пересекается ли новый шар со стенами или уже существующими шарами
 
        if (x - r < 0 || x + r > w || y - r < 0 || y + r > h) return null;
 
        for (var i = 0; i < balls.length; i++) {
 
            var rx = balls[i].x - x;
 
            var ry = balls[i].y - y;
 
            var rLen2 = rx * rx + ry * ry;
 
            if (rLen2 < 4 * r2) return null;
 
        }
 
        var b = [];
 
 
        b.x = x;                b.y = y;        // расчетные координаты шара
 
        b.fx = 0;              b.fy = 0;      // сила, действующая на шар
 
        b.vx = 0;              b.vy = 0;      // скорость
 
 
        balls[balls.length] = b;                // добавить элемент в конец массива
 
        return b;
 
    };
 
 
    // Основной цикл программы
 
 
    function control() {
 
        physics();
 
        draw();
 
    }
 
 
    // Расчетная часть программы
 
 
    function physics() {                        // то, что происходит каждый шаг времени
 
        for (var s = 1; s <= spf; s++) {
 
 
            // пересчет сил идет отдельным массивом, т.к. далее будут добавляться силы взаимодействия между шарами
 
            for (var i0 = 0; i0 < balls.length; i0++) {
 
                balls[i0].fx = - B * balls[i0].vx;
 
                balls[i0].fy = - B * balls[i0].vy;
 
            }
 
 
            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/2))  && (balls[i].y <= (r/2))) {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 <= (r/2))  && (balls[i].y >= (600/scale -r/2))) {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/2))  && (balls[i].y <= (r/2))) {balls.splice(i, 1)}; 
 
 
                // расчет взаимодействия производится со всеми следующими шарами в массиве,
 
                // чтобы не считать каждое взаимодействие дважды
 
                var b = balls[i];
 
                for (var j = i + 1; j < balls.length; j++) {
 
                    var b2 = balls[j];
 
                    var rx = b.x - b2.x;  var ry = b.y - b2.y;        // вектор смотрит на первый шар (b)
 
                    var r2 = rx * rx + ry * ry;                        // квадрат расстояния между шарами
 
                    if (r2 > aCut2) continue;                          // проверка на радиус обрезания
 
                    var rLen = (Math.sqrt(r2));
 
       
 
 
                    // если расстояние между частицами мало, силы будут посчитаны для K * a
 
                    if (r2 < K2a2) {
 
                        if (rLen > 0.00001) {                          // проверка, чтобы избежать деления на 0
 
                            rx = rx / rLen * Ka;
 
                            ry = ry / rLen * Ka;
 
                        }
 
                        r2 = K2a2;
 
                        rLen = Ka;                                      // корень K2a2
 
                    }
 
 
                    // сила взаимодействия
 
                    var s2 = a2 / r2;        var s4 = s2 * s2;        // ___в целях оптимизации___
 
                    var F = LJCoeff * s4 * s4 * (s4 * s2 - 1);          // сила взаимодействия Леннарда-Джонса
 
 
                    var Fx = F * rx;        var Fy = F * ry;
 
                    b.fx += Fx;            b.fy += Fy;
 
                    b2.fx -= Fx;            b2.fy -= Fy;
 
                }
 
 
                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.x + r > w) { b.fx += -Cwall * (b.x + r - w) - Bwall * b.vx; }
 
                if (b.x - r < 0) { b.fx += -Cwall * (b.x - r) - Bwall * b.vx; }
 
 
                b.vx += b.fx / m * dt;        b.vy += b.fy / m * dt;
 
                b.x += b.vx * dt;            b.y += b.vy * dt;
 
            }
 
        }
 
    }
 
 
    // Рисование
 
 
    var rScale13 = r * scale * 1.3;        // ___в целях оптимизации___
 
    var rScaleShift = r * scale / 5;        // ___в целях оптимизации___
 
  var line ;
 
  var radi = 30;              // линия которая показывает предполагаему траекторию "битка"
 
 
 
    function draw() {
 
        context.clearRect(0, 0, w * scale, h * scale);      // очистить экран
 
        for (var i = 1; i < balls.length; i++){
 
            var xS = balls[i].x * scale;          var yS = balls[i].y * scale;
 
            // расчет градиента нужно проводить для каждого шара
 
            var gradient = context.createRadialGradient(xS, yS, rScale13, xS - rScaleShift, yS + rScaleShift, 0);
 
            gradient.addColorStop(0, "#fdebeb");
 
            gradient.addColorStop(1, "#fffcfc");
 
            context.fillStyle = gradient;
 
 
            context.beginPath();
 
            context.arc(xS, yS, r * scale, 0, 2 * Math.PI, false);
 
            context.closePath();
 
            context.fill();
 
        }
 
    for (var i = 0; i < 1; i++){
 
            var xS = balls[i].x * scale;          var yS = balls[i].y * scale;
 
            // расчет градиента нужно проводить для каждого шара
 
            var gradient = context.createRadialGradient(xS, yS, rScale13, xS - rScaleShift, yS + rScaleShift, 0);
 
            gradient.addColorStop(0, "#cd0000");
 
            gradient.addColorStop(1, "#fffcfc");
 
            context.fillStyle = gradient;
 
 
            context.beginPath();
 
            context.arc(xS, yS, r * scale, 0, 2 * Math.PI, false);
 
            context.closePath();
 
            context.fill();
 
        }
 
 
   
 
   
 
      context.lineWidth="3";
 
      context.strokeStyle="#fff506";
 
            context.beginPath();
 
            context.moveTo(balls[0].x * scale, balls[0].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.stroke();
 
   
 
 
    // прорисовка луз
 
    // verh lev
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff ";
 
    context.beginPath();
 
    context.moveTo(0, 0);                                                                                                                                                       
 
    context.lineTo(0,14 +2.5 );
 
    context.stroke();
 
 
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff";
 
    context.beginPath();
 
    context.moveTo(0, 0);                                                                                                                                                       
 
    context.lineTo(14 +2.5,0 );
 
    context.stroke();
 
 
 
      // verh prav
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff";
 
    context.beginPath();
 
    context.moveTo(286 - 2.5, 0);                                                                                                                                                       
 
    context.lineTo(300,0 );
 
    context.stroke();
 
 
 
  context.lineWidth="3";
 
    context.strokeStyle="##ffffff";
 
    context.beginPath();
 
    context.moveTo(300, 0);                                                                                                                                                       
 
    context.lineTo(300,14 +2.5 );
 
    context.stroke();
 
 
 
        // niz lev
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff";
 
    context.beginPath();
 
    context.moveTo(0, 600);                                                                                                                                                       
 
    context.lineTo(14 +2.5,600 );
 
    context.stroke();
 
 
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff";
 
    context.beginPath();
 
    context.moveTo(0, 586 - 2.5);                                                                                                                                                       
 
    context.lineTo(0,600 );
 
    context.stroke();
 
   
 
   
 
    // niz prav
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff";
 
    context.beginPath();
 
    context.moveTo(300, 600);                                                                                                                                                       
 
    context.lineTo(300,586 - 2.5);
 
    context.stroke();
 
 
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff";
 
    context.beginPath();
 
    context.moveTo(300, 600);                                                                                                                                                       
 
    context.lineTo(286 - 2.5,600 );
 
    context.stroke();
 
 
 
  //sered lev
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff";
 
    context.beginPath();
 
    context.moveTo(0, 289);                                                                                                                                                       
 
    context.lineTo(0,311);
 
    context.stroke();
 
 
 
  //sered prav
 
 
 
  context.lineWidth="3";
 
    context.strokeStyle="#ffffff";
 
    context.beginPath();
 
    context.moveTo(300, 289);                                                                                                                                                       
 
    context.lineTo(300,311 );
 
    context.stroke();
 
   
 
 
 
    }
 
 
 
 
    // Запуск системы
 
                      // добавляем 20 частиц, сдвинув их от стен
 
    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 ); 
 
   
 
  this.setSlider_01 = function(c) { q=-c ;}; // функция для слайдера угла
 
  this.setSlider_02 = function(c) { v0=c ;}; // функция для слайдера угла
 
 
// Настройка интерфейса
 
 
    slider_01.min = 0;              slider_01.max =360;
 
    slider_01.step = 0.5;
 
    slider_01.value = q;          // начальное значение ползунка должно задаваться после min и max
 
    text_01.value = Math.abs(q);
 
    slider_02.min = 0;              slider_02.max = 10;
 
    slider_02.step = 0.5;
 
    slider_02.value = v0;                // начальное значение ползунка должно задаваться после min и max
 
    text_02.value = v0;
 
 
 
  this.setSlider_01(q);
 
  this.setSlider_02(v0);
 
   
 
    this.newSystem = function() {
 
    balls[0].vx = v0* Math.cos(q*Pi/180);
 
        balls[0].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);
 
}
 
 
 
 
 
</syntaxhighlight>
 
Файл '''"Billyard1version.html"'''
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
<!DOCTYPE html>
 
<html>
 
<head>
 
    <title>Billyard</title>
 
    <script src="Billyard1version.js"></script>
 
</head>
 
<body>
 
    <canvas id="canvasBalls" width="300" height="600" style="border:1px none #000000;background: #008000"></canvas>
 
<br>
 
    <div>Угол:
 
        <input type="range" id="slider_01" style="width: 150px;" oninput="app.setSlider_01(this.value); document.getElementById('text_01').value = this.value;">
 
      q =
 
        <input id="text_01" style="width: 5ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)"  oninput="
 
            // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
 
            if (!this.checkValidity()) return;
 
            app.setSlider_01(this.value);
 
            document.getElementById('slider_01').value = this.value;
 
        ">
 
    </div><br>
 
 
    <div>Начальная скорость:
 
        <input type="range" id="slider_02" style="width: 150px;" oninput="app.setSlider_02(this.value); document.getElementById('text_02').value = this.value;">
 
      v0 =
 
        <input id="text_02" style="width: 5ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
 
            // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
 
            if (!this.checkValidity()) return;
 
            app.setSlider_02(this.value);
 
            document.getElementById('slider_02').value = this.value;
 
        ">
 
    </div><br>
 
 
 
 
 
  <input type="button" style="width: 50px" name="" onclick="app.newSystem();return false;" value="PLAY"/>
 
 
 
 
 
<script type="text/javascript">var app = new MainBalls(
 
            document.getElementById('slider_01'),
 
            document.getElementById('text_01'),
 
            document.getElementById('slider_02'),
 
            document.getElementById('text_02')
 
    );</script>
 
</body>
 
</html>
 
</syntaxhighlight>
 
</div>
 
 
 
  
 
[[Файл:WHVJA1.png|thumb|рис.1.Траектория разлета шаров при центральном разбиении пирамиды.|слева|250px]]
 
[[Файл:WHVJA1.png|thumb|рис.1.Траектория разлета шаров при центральном разбиении пирамиды.|слева|250px]]
 
 
  
  
Строка 509: Строка 82:
  
 
<big><math>  2v_{1}'v_{2}'\cos\left(θ\right) = 0 </math></big>, а это возможно, если <big><math>  v_{1}' = 0 </math></big>(что соответствует прямому удару), или при <big><math> θ = 90° </math></big>
 
<big><math>  2v_{1}'v_{2}'\cos\left(θ\right) = 0 </math></big>, а это возможно, если <big><math>  v_{1}' = 0 </math></big>(что соответствует прямому удару), или при <big><math> θ = 90° </math></big>
 
''Примечание :''Вывод правила 90° основан на двух существенных допущениях: трение между шарами равно нулю и столкновение шаров – абсолютно упругое.
 
  
 
{{конец цитаты}}
 
{{конец цитаты}}
Строка 528: Строка 99:
 
<math> l_{1} = 560 </math>мм. - расстояние от прицельного шара до верхней левой лузы, <math> l_{2} = 969 </math>мм. - расстояние от битка до верхней правой лузы, в момент соприкосновения шаров, <math> l = 700</math>мм. - расстояние между шарами в начальный момент времени.
 
<math> l_{1} = 560 </math>мм. - расстояние от прицельного шара до верхней левой лузы, <math> l_{2} = 969 </math>мм. - расстояние от битка до верхней правой лузы, в момент соприкосновения шаров, <math> l = 700</math>мм. - расстояние между шарами в начальный момент времени.
  
Угол разлета шаров после удара 90°, значит можем рассчитать <big><math> θ_{1}, θ_{2} </math></big>
+
<big><math> χ = \frac{π}{3}\ </math></big>
  
 
<math>\Downarrow </math>
 
<math>\Downarrow </math>
Строка 536: Строка 107:
 
В таком случае, после соударения шаров, они приобретут скорости:
 
В таком случае, после соударения шаров, они приобретут скорости:
  
<big><math> ú_{1} =\frac{\sqrt3}{2}\ v </math></big> <math>\qquad</math> <big><math> ú_{2} =\frac{1}{2}\ v </math></big> ,<math>\qquad</math> где искомая скорость <big><math> v = v_{2} </math></big>, т.к. в нашем случае прицельный шар в начальный момент времени неподвижен.
+
<big><math> ú_{1} =\frac{\sqrt3}{2}\ v </math></big> <math>\qquad</math> <big><math> ú_{2} =\frac{1}{2}\ v </math></big> ,<math>\qquad</math> где <big><math> v = v_{2} </math></big>, т.к. в нашем случае прицельный шар в начальный момент времени неподвижен.
  
 
В рассмотренном случае угол, под которым производится удар, по отношению к оси OX равен <big><math> \frac{π}{2}\ </math></big>. В  общем случае этот угол зависит от расположения битка.
 
В рассмотренном случае угол, под которым производится удар, по отношению к оси OX равен <big><math> \frac{π}{2}\ </math></big>. В  общем случае этот угол зависит от расположения битка.
 +
 +
 +
[[Файл:OneBall.png|thumb| Диапазон размещения "битка"(красный цвет), когда целью удара является только прицельный шар.|слева|200px ]][[Файл:ThBalls.png|thumb| Диапазон размещения "битка"(красный цвет), когда целью удара является и прицельный шар, и сам "биток".|200px  ]][[Файл:Circle.PNG|thumb| Когда целью удара является и прицельный шар, и сам "биток", область размещения прицельного шара - полоса в виде полуокружности рис.3.|200px ]]
  
 
== Обсуждение результатов и выводы ==
 
== Обсуждение результатов и выводы ==
[[Файл:RaspolpzhenieBitka.PNG|справа|600px]]
+
[[Файл:RaspolpzhenieBitka.PNG|справа|400px]]
Таким образом, в ходе работы над проектом была написана программа, моделирующая процесс игры в бильярд, а так же смоделирован рассматриваемый удар, целью, которого являются оба шара. Были рассчитаны скорость и угол направления удара в рассматриваемом случае.
+
Таким образом, в ходе работы над проектом были установлены возможные положения шаров, когда целью удара является один или оба шара   (рис.3 и рис.4). А на рис.5 указана область расположения для прицельного шара, когда стоит задача загнать в верхние лузы оба шара.
Установлены возможные положения шаров, когда целью удара является один или оба шара (рис.3 и рис.4). А на рис.5 указана область расположения для прицельного шара, когда стоит задача загнать в верхние лузы оба шара.
 
  
  
 
<br>
 
<br>
Скачать отчет:[[Медиа:KursStepanovBilliard.docx|docx]]
+
Скачать отчет:
 
<br>
 
<br>
Скачать презентацию:[[Медиа:Presentation.pptx|pptx]]
+
Скачать презентацию:
  
 
== Ссылки по теме ==
 
== Ссылки по теме ==
 
* [http://publ.lib.ru/ARCHIVES/K/KORIOLIS_Gaspar_Gyustav/_Koriolis_G.G..html, Математическая теория явлений бильярдной игры - Г. Кориолис.]
 
* [http://publ.lib.ru/ARCHIVES/K/KORIOLIS_Gaspar_Gyustav/_Koriolis_G.G..html, Математическая теория явлений бильярдной игры - Г. Кориолис.]
 
* [http://inis.jinr.ru/sl/vol2/Physics/%D0%9A%D1%83%D1%80%D1%81%D1%8B/%D0%9B%D0%B0%D0%BD%D0%B4%D0%B0%D1%83,%D0%9B%D0%B8%D1%84%D1%88%D0%B8%D1%86/%D0%9B%D0%B0%D0%BD%D0%B4%D0%B0%D1%83%20%D0%9B.%D0%94.,%20%D0%9B%D0%B8%D1%84%D1%88%D0%B8%D1%86%20%D0%95.%D0%9C.,%20%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%BA%D0%B0,%20%D0%A2%D0%A4%20%D1%821,%201988.pdf, Ландау Л.Д., Лифшиц Е.М., Механика]
 
* [http://inis.jinr.ru/sl/vol2/Physics/%D0%9A%D1%83%D1%80%D1%81%D1%8B/%D0%9B%D0%B0%D0%BD%D0%B4%D0%B0%D1%83,%D0%9B%D0%B8%D1%84%D1%88%D0%B8%D1%86/%D0%9B%D0%B0%D0%BD%D0%B4%D0%B0%D1%83%20%D0%9B.%D0%94.,%20%D0%9B%D0%B8%D1%84%D1%88%D0%B8%D1%86%20%D0%95.%D0%9C.,%20%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%BA%D0%B0,%20%D0%A2%D0%A4%20%D1%821,%201988.pdf, Ландау Л.Д., Лифшиц Е.М., Механика]
* [[Потенциал_Леннард-Джонса|потенциала Леннарда-Джонса]]
 
* [https://ru.wikipedia.org/wiki/Бильярд бильярд]
 
*  [http://mathoverflow.net/questions/156263/perfectly-centered-break-of-a-perfectly-aligned-pool-ball-rack/156407#156407,_Джимом-Бэлк Джимом Белк]
 
  
 
== См. также ==
 
== См. также ==
Вам запрещено изменять защиту статьи. 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:

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

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