0% нашли этот документ полезным (0 голосов)
9 просмотров12 страниц

Buldakov

Загружено:

totem4iikk
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате DOCX, PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
9 просмотров12 страниц

Buldakov

Загружено:

totem4iikk
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате DOCX, PDF, TXT или читать онлайн в Scribd

Санкт-Петербургский государственный политехнический университет

Институт Прикладной математики и механики


Кафедра Теоретической механики

П.Ю. Булдаков

ДИНАМИКА БИЛЬЯРДА

Курсовой проект

Направление подготовки бакалавров: 010800 Механика и математическое моделирование

Группа 23604/1

Руководитель проекта: Панченко А.Ю.

Допущен к защите:
«__»_____________20__ г.

Санкт-Петербург
2015

1
Оглавление
Оглавление.............................................................................................................................................2
Введение.................................................................................................................................................3
Глава 1. Общие сведения....................................................................................................................4
1.1 История возникновения бильярда...............................................................................................4
1.2 Виды бильярда..............................................................................................................................4
1.3 Потенциал Леннарда-Джонса......................................................................................................5
Глава 2. ...................................................................................................................................................6
2.1 Задачи, поставленные перед программой..................................................................................6
2.2 Написание кода.............................................................................................................................7
Итоги работы .......................................................................................................................................11
Литература............................................................................................................................................12

2
Введение

Проект направлен на изучение динамики взаимодействия шаров при игре в бильярд. В процессе
выполнения курсовой работы необходимо решить следующие задачи:
 Написать программу, моделирующую динамику взаимодействия шаров при игре в
Бильярд. Взаимодействие между шарами описывается с помощью потенциала
Леннарда-Джонса.
 Рассмотреть классическое центрально разбиение в русском бильярде, проследить
траекторию разлета.
В первой главе приведены общие сведения по теме: история возникновения бильярда как
такового, а также его виды, потенциала Леннарда-Джонса. Во второй главе описывается то, как
создавалась программа с примерами кодов.

3
Глава 1. Общие сведения

1.1 История возникновения бильярда

Первый бильярдный стол (согласно сохранившимся документам) был изготовлен мастером


Анри де Винемом в 1469 году для короля Франции Людовика XI. Этот стол был похож на
современный бильярдный: у него было каменное основание, ограждение, он был покрыт сукном.
Документально подтверждены утверждения об игре в бильярд королевы Шотландии Марии
Стюарт накануне ее казни и о ее просьбе архиепископу Глазго подыскать столу подходящее
помещение после ее смерти. В Россию бильярд был завезен из Голландии Петром I. Новинка
быстро завоевала популярность. После смерти Петра I обучение игре на бильярде было
включено Верховным тайным советом в курс наук Петра II, его внука и наследника. Екатерина II
указом от 7 декабря 1770 года приказала в трактирах и на постоялых дворах «для увеселения
приходящих дозволить иметь биллиарды». На рубеже XVIII и XIX веков бильярд являлся частью
«обязательной» программы воспитания дворян в Европе и в России.

Впервые о математическом базисе бильярдной игры заговорил Гаспар Густав Кориолис в


своей книге «Théorie mathématique du jeu de billard» (Русск. перевод: «Математическая теория
явлений бильярдной игры») в 1835 году. Он использовал в своей работе элементы теории
вероятностей, теории пределов и общего анализа. Однако особого интереса у современников (по
мнению Лемана) книга не вызвала: ни у математиков, ни у игроков в бильярд.

Прошло более полутораста лет, и математический бильярд развился в свою теорию,


породив несколько побочных. «Теория бильярдов» сегодня неотъемлемая часть эргодической
теории и теории динамических систем, имеет важнейшее применение в физике.
Математиком Гальперином создан способ определения числа с помощью бильярда. Так же
известны результаты исследований математиков Штейнгауза, Альхазена и Гарднера.

1.2. Виды бильярда

Бильярд чаще всего подразделяют на четыре основных вида:

1) Русский бильярд

Столы в Русском бильярде имеют размеры в 12 футов, 16 шаров (диаметр 68 мм). 15-
ть шаров, участвующие в игре, пронумерованы, оставшийся 16-й, имеет другой цвет, но
не имеет номера.

2) Американский Пул

Американский пул – одна из самых несложных разновидностей игры в бильярд.


4
3) Английский Снукер

Столы в 12 футов, лузы примерно в 120 мм, 20 цветных шаров размером 52,4 мм
каждый.

4) Французский Карамболь

Участники играют на 10-ти футовых столах, используя шары по 60 миллиметров. Два


шара – белые, один – красный. Название игре дал особый удар, который так и
называется – Карамболь.

1.3. Потенциал Леннарда-Джонса

Парный силовой потенциал взаимодействия. Определяется формулой:

Π(r) = D [( r )12 − 2( r )6 ],
a a

где

 r — расстояние между частицами,


 D — энергия связи,
 a — длина связи

Потенциал является частным случаем потенциала Ми и не имеет безразмерных параметров.

Сила взаимодействия, соответствующая потенциалу Леннард-Джонса, вычисляется по формуле

[( r )13 − ( ar ) ].
D a
F(r) = 12 a
7

Для потенциала Леннард-Джонса жесткость связи, критическая длина связи и прочность связи,
соответственно, равны

√ √
D 13 504 7 D D
C = 72 a
2
, b= 6

7
a ≈ 1.11 a , P = 169
6

13 a
≈ 2.7 a .
Векторная сила взаимодействия определяется формулой

[( r )14 − ( ar ) ] r.
D a
F(r) = −∇Π(r) = 12 a
8

Данное выражение содержит лишь четные степени межатомного расстояния r, что позволяет при
численных расчетах методом динамики частиц не использовать операцию извлечения корня.

5
Глава 2. Написание программы

2.1 Задачи, поставленные перед программой

Программа должна выполнять следующие функции:

1. Визуализация стола, шаров и луз для игры в бильярд.

2. Взаимодействие между шарами должно описывается с помощью потенциала Леннарда-


Джонса.

3. У игрока должна быть возможность выбирать направление и силу удара.

4. Игрок, при выборе угла и силы удара, должен видеть примерную траекторию движения
“битка”

5. Кнопки “PLAY” и “AGAIN” для удобства.

2.2 Написание кода

Ниже приведены части кода, которые отвечают за:

1) Взаимодействие шаров.

2) Задание пирамиды из шаров.

3) Нажатие кнопок “PLAY” и “AGAIN”.

1) Взаимодействие шаров.

1. var balls = []; // массив шаров


2. var addNewBall = function(x, y) {
3. // проверка - не пересекается ли новый шар со стенами или уже
существующими шарами
4. if (x - r < 0 || x + r > w || y - r < 0 || y + r > h) return null;
5. for (var i = 0; i < [Link]; i++) {
6. var rx = balls[i].x - x;
7. var ry = balls[i].y - y;
8. var rLen2 = rx * rx + ry * ry;
9. if (rLen2 < 4 * r2) return null;
10. }

6
11. var b = [];
12.
13. b.x = x; b.y = y; // расчетные
координаты шара
14. [Link] = 0; [Link] = 0; // сила, действующая
на шар
15. [Link] = 0; [Link] = 0; // скорость
16.
17. balls[[Link]] = b; // добавить элемент в
конец массива
18. return b;
19. };
20.
21. // Основной цикл программы
22.
23. function control() {
24. physics();
25. draw();
26. }
27.
28. // Расчетная часть программы
29.
30. function physics() { // то, что происходит
каждый шаг времени
31. for (var s = 1; s <= spf; s++) {
32.
33. // пересчет сил идет отдельным массивом, т.к. далее будут
добавляться силы взаимодействия между шарами
34. for (var i0 = 0; i0 < [Link]; i0++) {
35. balls[i0].fx = - B * balls[i0].vx;
36. balls[i0].fy = - B * balls[i0].vy;
37. }
38.
39. for (var i = 0; i < [Link]; i++) { // пеерсчет
взаимодействия между шарами

1. // расчет взаимодействия производится со всеми следующими шарами в


массиве,
2. // чтобы не считать каждое взаимодействие дважды
3. var b = balls[i];
4. for (var j = i + 1; j < [Link]; j++) {
5. var b2 = balls[j];
6. var rx = b.x - b2.x; var ry = b.y - b2.y; //
вектор смотрит на первый шар (b)
7. var r2 = rx * rx + ry * ry; //
квадрат расстояния между шарами
7
8. if (r2 > aCut2) continue; //
проверка на радиус обрезания
9. var rLen = ([Link](r2));
10.
11.
12. // если расстояние между частицами мало, силы
будут посчитаны для K * a
13. if (r2 < K2a2) {
14. if (rLen > 0.00001) {
// проверка, чтобы избежать деления на 0
15. rx = rx / rLen * Ka;
16. ry = ry / rLen * Ka;
17. }
18. r2 = K2a2;
19. rLen = Ka;
// корень K2a2
20. }
21.
22. // сила взаимодействия
23. var s2 = a2 / r2; var s4 = s2 * s2;
// ___в целях оптимизации___
24. var F = LJCoeff * s4 * s4 * (s4 * s2 - 1);
// сила взаимодействия Леннарда-Джонса
25.
26. var Fx = F * rx; var Fy = F * ry;
27. [Link] += Fx; [Link] += Fy;
28. [Link] -= Fx; [Link] -= Fy;
29. }
30.
31. if (b.y + r > h) { [Link] += -
Cwall * (b.y + r - h) - Bwall * [Link]; } // рассчет взаимодействия со
стенками : когда координаты шара совпадают с координатами в условии цикла,
шару придается скорость и направление
32. if (b.y - r < 0) { [Link] += -
Cwall * (b.y - r) - Bwall * [Link];}
33. if (b.x + r > w) { [Link] += -
Cwall * (b.x + r - w) - Bwall * [Link]; }
34. if (b.x - r < 0) { [Link] += -
Cwall * (b.x - r) - Bwall * [Link]; }
35.
36. [Link] += [Link] / m * dt; [Link] += [Link] / m * dt;
37. b.x += [Link] * dt; b.y += [Link] * dt;
38. }
39. }
40. }

2) Задание пирамиды из шаров.


8
1. addNewBall(16*w/32, 16*h/32 );
2. addNewBall(16*w/32, 8*h/32 );
3. addNewBall(16*w/32 - r, 8*h/32 - 1.7321*r);
4. addNewBall(16*w/32 + r, 8*h/32 - 1.7321*r );
5. addNewBall(16*w/32, 8*h/32 - 2*1.7321*r );
6. addNewBall(16*w/32 - 2*r, 8*h/32 - 2*1.7321*r );
7. addNewBall(16*w/32 + 2*r, 8*h/32 - 2*1.7321*r );
8. addNewBall(16*w/32 + r, 8*h/32 - 3*1.7321*r );
9. addNewBall(16*w/32 - r, 8*h/32 - 3*1.7321*r );
10. addNewBall(16*w/32 + 3*r, 8*h/32 - 3*1.7321*r );
11. addNewBall(16*w/32 - 3*r, 8*h/32 - 3*1.7321*r );
12. addNewBall(16*w/32, 8*h/32 - 4*1.7321*r );
13. addNewBall(16*w/32 - 2*r, 8*h/32 - 4*1.7321*r );
14. addNewBall(16*w/32 + 2*r, 8*h/32 - 4*1.7321*r );
15. addNewBall(16*w/32 - 4*r, 8*h/32 - 4*1.7321*r );
16. addNewBall(16*w/32 + 4*r, 8*h/32 - 4*1.7321*r );
17. addNewBall(16*w/32, 16*h/32 );

3) Нажатие кнопок “PLAY” и “AGAIN”.

1. this.setSlider_01 = function(c) { q=-c ;}; // функция для слайдера угла


2. this.setSlider_02 = function(c) { v0=c ;}; // функция для слайдера угла
3.
4. // настройка интерфейса
5.
6. slider_01.min = 0; slider_01.max =360;
7. slider_01.step = 0.5;
8. slider_01.value = q; // начальное значение ползунка должно
задаваться после min и max
9. text_01.value = [Link](q);
10. slider_02.min = 0; slider_02.max = 10;
11. slider_02.step = 0.5;
12. slider_02.value = v0; // начальное значение
ползунка должно задаваться после min и max
13. text_02.value = v0;
14.
15. this.setSlider_01(q);
16. this.setSlider_02(v0);
17.
18. // кнопка “PLAY”
19.
20. [Link] = function() {
21. balls[0].vx = v0* [Link](q*Pi/180);
22. balls[0].vy = v0* [Link](q*Pi/180);

9
23. }
24. // кнопка “AGAIN”
25.
26. this.newSystem1 = function() {
27. for (var i = 20; i >= 0; i--)
28. {[Link](i, 1)};
29. addNewBall(16*w/32, 16*h/32 );
30. addNewBall(16*w/32, 8*h/32 );
31. addNewBall(16*w/32 - r, 8*h/32 - 1.7321*r);
32. addNewBall(16*w/32 + r, 8*h/32 - 1.7321*r );
33. addNewBall(16*w/32, 8*h/32 - 2*1.7321*r );
34. addNewBall(16*w/32 - 2*r, 8*h/32 - 2*1.7321*r );
35. addNewBall(16*w/32 + 2*r, 8*h/32 - 2*1.7321*r );
36. addNewBall(16*w/32 + r, 8*h/32 - 3*1.7321*r );
37. addNewBall(16*w/32 - r, 8*h/32 - 3*1.7321*r );
38. addNewBall(16*w/32 + 3*r, 8*h/32 - 3*1.7321*r );
39. addNewBall(16*w/32 - 3*r, 8*h/32 - 3*1.7321*r );
40. addNewBall(16*w/32, 8*h/32 - 4*1.7321*r );
41. addNewBall(16*w/32 - 2*r, 8*h/32 - 4*1.7321*r );
42. addNewBall(16*w/32 + 2*r, 8*h/32 - 4*1.7321*r );
43. addNewBall(16*w/32 - 4*r, 8*h/32 - 4*1.7321*r );
44. addNewBall(16*w/32 + 4*r, 8*h/32 - 4*1.7321*r );
45. addNewBall(16*w/32, 16*h/32 );

10
2.4 Итог работы.

В ходе работы над проектом была написана программа, моделирующая процесс игры в
бильярд. Данная программа показывает, что траектория разлета шаров после центрального
удара не зависит от силы удара, но зависит от малейшего изменения угла, так как меняется
распространение ударной волны в пирамиде. При силе, достаточной для визуально заметного
разлета шаров, при изменении угла на 1 градус - полное отклонение от симметрии, при 0.1 -
заметное отклонение от симметрии, при 0.01 - трудно различимое.

Профессор Джим Белк (Jim Belk) рассчитал направление и скорость движения каждого из 15
шаров пирамиды, а также битка , после соударения.Для сравнения, помните, что начальная
скорость битка была 10 ед/сек.

11
Список литературы
1. Баррет Д. JavaScript. Web-профессионалам. - Киев: БХВ - Киев, 2001.
2. Вайк А. JavaScript в примерах. - Киев: ДиаСофт, 2000.
3. Математическая теория явлений бильярдной игры - Г. Кориолис.
4. Ландау Л.Д., Лифшиц Е.М., Механика

12

Вам также может понравиться