Редактирование: КП: Прицельный бильярд
Внимание! Вы не авторизовались на сайте. Ваш 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). Взаимодействие между шарами описывается с помощью потенциала Леннарда-Джонса. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{#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 }} | ||
Строка 68: | Строка 49: | ||
var T0 = 1; // масштаб времени (период колебаний исходной системы) | var T0 = 1; // масштаб времени (период колебаний исходной системы) | ||
var a0 = 1; // масштаб расстояния (диаметр шара) | var a0 = 1; // масштаб расстояния (диаметр шара) | ||
− | var q = 90; // угол | + | var q = -90; // угол |
Строка 153: | Строка 134: | ||
} | } | ||
− | for (var i = 0; i < balls.length; i++) { | + | for (var i = 0; i < balls.length; i++) { |
//попадание в лузу | //попадание в лузу | ||
− | if ((balls[i].x >= (300/scale-r | + | 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 | + | if ((balls[i].x >= (300/scale-r)) && (balls[i].y <= (r))) {balls.splice(i, 1)}; |
− | if ((balls[i].x >= (300/scale-r | + | if ((balls[i].x >= (300/scale-r)) && (balls[i].y >= (600/scale -r))) {balls.splice(i, 1)}; |
− | if ((balls[i].x <= (r | + | if ((balls[i].x <= (r)) && (balls[i].y >= (600/scale -r))) {balls.splice(i, 1)}; |
− | if ((balls[i].x <= (r | + | 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 | + | if ((balls[i].x <= (r)) && (balls[i].y <= (r))) {balls.splice(i, 1)}; |
// расчет взаимодействия производится со всеми следующими шарами в массиве, | // расчет взаимодействия производится со всеми следующими шарами в массиве, | ||
Строка 195: | Строка 176: | ||
} | } | ||
− | 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: | Строка 192: | ||
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 = | + | 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: | Строка 210: | ||
context.fill(); | context.fill(); | ||
} | } | ||
− | for (var 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: | Строка 229: | ||
context.strokeStyle="#fff506"; | context.strokeStyle="#fff506"; | ||
context.beginPath(); | context.beginPath(); | ||
− | context.moveTo(balls[ | + | context.moveTo(balls[15].x * scale, balls[15].y * scale); |
− | context.lineTo(radi*v0*Math.cos(q*Pi/180) + balls[ | + | 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: | Строка 317: | ||
// Запуск системы | // Запуск системы | ||
− | |||
− | |||
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: | Строка 334: | ||
addNewBall(16*w/32, 16*h/32 ); | addNewBall(16*w/32, 16*h/32 ); | ||
− | this.setSlider_01 = function(c) { q= | + | this.setSlider_01 = function(c) { q=c ;}; // функция для слайдера угла |
this.setSlider_02 = function(c) { v0=c ;}; // функция для слайдера угла | this.setSlider_02 = function(c) { v0=c ;}; // функция для слайдера угла | ||
// Настройка интерфейса | // Настройка интерфейса | ||
− | slider_01.min = | + | slider_01.min = -360; slider_01.max =180; |
− | slider_01.step = 0. | + | slider_01.step = 0.1; |
slider_01.value = q; // начальное значение ползунка должно задаваться после min и max | slider_01.value = q; // начальное значение ползунка должно задаваться после min и max | ||
− | text_01.value = | + | 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: | Строка 352: | ||
this.newSystem = function() { | this.newSystem = function() { | ||
− | balls[ | + | balls[15].vx = v0* Math.cos(q*Pi/180); |
− | balls[ | + | balls[15].vy = v0* Math.sin(q*Pi/180); |
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
setInterval(control, 1000 / fps); | setInterval(control, 1000 / fps); | ||
} | } | ||
− | |||
− | |||
Строка 453: | Строка 408: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</div> | </div> | ||
− | |||
− | |||
[[Файл:WHVJA1.png|thumb|рис.1.Траектория разлета шаров при центральном разбиении пирамиды.|слева|250px]] | [[Файл:WHVJA1.png|thumb|рис.1.Траектория разлета шаров при центральном разбиении пирамиды.|слева|250px]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Решение == | == Решение == | ||
Строка 528: | Строка 457: | ||
<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>мм. - расстояние между шарами в начальный момент времени. | ||
− | + | <big><math> χ = \frac{π}{3}\ </math></big> | |
<math>\Downarrow </math> | <math>\Downarrow </math> | ||
Строка 536: | Строка 465: | ||
В таком случае, после соударения шаров, они приобретут скорости: | В таком случае, после соударения шаров, они приобретут скорости: | ||
− | <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> ú_{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>. В общем случае этот угол зависит от расположения битка. | ||
== Обсуждение результатов и выводы == | == Обсуждение результатов и выводы == | ||
− | [[Файл:RaspolpzhenieBitka.PNG|справа| | + | [[Файл:RaspolpzhenieBitka.PNG|справа|400px]] |
Таким образом, в ходе работы над проектом была написана программа, моделирующая процесс игры в бильярд, а так же смоделирован рассматриваемый удар, целью, которого являются оба шара. Были рассчитаны скорость и угол направления удара в рассматриваемом случае. | Таким образом, в ходе работы над проектом была написана программа, моделирующая процесс игры в бильярд, а так же смоделирован рассматриваемый удар, целью, которого являются оба шара. Были рассчитаны скорость и угол направления удара в рассматриваемом случае. | ||
Установлены возможные положения шаров, когда целью удара является один или оба шара (рис.3 и рис.4). А на рис.5 указана область расположения для прицельного шара, когда стоит задача загнать в верхние лузы оба шара. | Установлены возможные положения шаров, когда целью удара является один или оба шара (рис.3 и рис.4). А на рис.5 указана область расположения для прицельного шара, когда стоит задача загнать в верхние лузы оба шара. | ||
Строка 547: | Строка 476: | ||
<br> | <br> | ||
− | Скачать отчет: | + | Скачать отчет: |
<br> | <br> | ||
− | Скачать презентацию: | + | Скачать презентацию: |
== Ссылки по теме == | == Ссылки по теме == | ||
* [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, Ландау Л.Д., Лифшиц Е.М., Механика] | ||
− | |||
− | |||
− | |||
== См. также == | == См. также == |