Динамика бильярда

Изучение динамики взаимодействия шаров при игре в бильярд. Создание программы, моделирующей динамику взаимодействия шаров при игре в бильярд. Рассмотрение классического центрального разбиения в русском бильярде, отслеживание траектории разлета.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.01.2020
Размер файла 145,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

П.Ю. Булдаков Группа 23604/1

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

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

Оглавление

  • Введение
  • 1. Общие сведения
    • 1.1 История возникновения бильярда
    • 1.2 Виды бильярда
    • 1.3 Потенциал Леннарда-Джонса
  • 2. Написание программы
    • 2.1 Задачи, поставленные перед программой
    • 2.2 Написание кода
  • Итоги работы
  • Литература
  • Введение
  • бильярд шар программа траектория
  • Проект направлен на изучение динамики взаимодействия шаров при игре в бильярд. В процессе выполнения курсовой работы необходимо решить следующие задачи:

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

· Рассмотреть классическое центрально разбиение в русском бильярде, проследить траекторию разлета.

В первой главе приведены общие сведения по теме: история возникновения бильярда как такового, а также его виды, потенциала Леннарда-Джонса. Во второй главе описывается то, как создавалась программа с примерами кодов.

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) Американский Пул

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

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

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

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

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

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

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

Р(r) = D [12 ? 26 ],

где

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

· D -- энергия связи,

· a -- длина связи

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

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

F(r) = 12 [13 ? 7].

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

C = 72 b =? 1.11 a, P = ? 2.7 .

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

F(r) = ??Р(r) = 12 [14 ? 8] r.

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

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 < balls.length; 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. }

11. var b = [];

12. b.x = x; b.y = y; // расчетные координаты шара

13. b.fx = 0; b.fy = 0; // сила, действующая на шар

14. b.vx = 0; b.vy = 0; // скорость

15. balls[balls.length] = b; // добавить элемент в конец массива

16. return b;

17. };

18. // Основной цикл программы

19. function control() {

20. physics();

21. draw();

22. }

23. // Расчетная часть программы

24. function physics() { // то, что происходит каждый шаг времени

25. for (var s = 1; s <= spf; s++) {

26. // пересчет сил идет отдельным массивом, т.к. далее будут добавляться силы взаимодействия между шарами

27. for (var i0 = 0; i0 < balls.length; i0++) {

28. balls[i0].fx = - B * balls[i0].vx;

29. balls[i0].fy = - B * balls[i0].vy;

30. }

31. for (var i = 0; i < balls.length; i++) { // пеерсчет взаимодействия между шарами

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

2. // чтобы не считать каждое взаимодействие дважды

3. var b = balls[i];

4. for (var j = i + 1; j < balls.length; 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; // квадрат расстояния между шарами

8. if (r2 > aCut2) continue; // проверка на радиус обрезания

9. var rLen = (Math.sqrt(r2));

10. // если расстояние между частицами мало, силы будут посчитаны для K * a

11. if (r2 < K2a2) {

12. if (rLen > 0.00001) { // проверка, чтобы избежать деления на 0

13. rx = rx / rLen * Ka;

14. ry = ry / rLen * Ka;

15. }

16. r2 = K2a2;

17. rLen = Ka; // корень K2a2

18. }

19. // сила взаимодействия

20. var s2 = a2 / r2; var s4 = s2 * s2; // ___в целях оптимизации___

21. var F = LJCoeff * s4 * s4 * (s4 * s2 - 1); // сила взаимодействия Леннарда-Джонса

22. var Fx = F * rx; var Fy = F * ry;

23. b.fx += Fx; b.fy += Fy;

24. b2.fx -= Fx; b2.fy -= Fy;

25. }

26. if (b.y + r > h) { b.fy += -Cwall * (b.y + r - h) - Bwall * b.vy; } // рассчет взаимодействия со стенками: когда координаты шара совпадают с координатами в условии цикла, шару придается скорость и направление

27. if (b.y - r < 0) { b.fy += -Cwall * (b.y - r) - Bwall * b.vy;}

28. if (b.x + r > w) { b.fx += -Cwall * (b.x + r - w) - Bwall * b.vx; }

29. if (b.x - r < 0) { b.fx += -Cwall * (b.x - r) - Bwall * b.vx; }

30. b.vx += b.fx / m * dt; b.vy += b.fy / m * dt;

31. b.x += b.vx * dt; b.y += b.vy * dt;

32. }

33. }

34. }

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

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. slider_01.min = 0; slider_01.max =360;

5. slider_01.step = 0.5;

6. slider_01.value = q; // начальное значение ползунка должно задаваться после min и max

7. text_01.value = Math.abs(q);

8. slider_02.min = 0; slider_02.max = 10;

9. slider_02.step = 0.5;

10. slider_02.value = v0; // начальное значение ползунка должно задаваться после min и max

11. text_02.value = v0;

12. this.setSlider_01(q);

13. this.setSlider_02(v0);

14. // кнопка “PLAY”

15. this.newSystem = function() {

16. balls[0].vx = v0* Math.cos(q*Pi/180);

17. balls[0].vy = v0* Math.sin(q*Pi/180);

18. }

19. // кнопка “AGAIN”

20. this.newSystem1 = function() {

21. for (var i = 20; i >= 0; i--)

22. {balls.splice(i, 1)};

23. addNewBall(16*w/32, 16*h/32 );

24. addNewBall(16*w/32, 8*h/32 );

25. addNewBall(16*w/32 - r, 8*h/32 - 1.7321*r);

26. addNewBall(16*w/32 + r, 8*h/32 - 1.7321*r );

27. addNewBall(16*w/32, 8*h/32 - 2*1.7321*r );

28. addNewBall(16*w/32 - 2*r, 8*h/32 - 2*1.7321*r );

29. addNewBall(16*w/32 + 2*r, 8*h/32 - 2*1.7321*r );

30. addNewBall(16*w/32 + r, 8*h/32 - 3*1.7321*r );

31. addNewBall(16*w/32 - r, 8*h/32 - 3*1.7321*r );

32. addNewBall(16*w/32 + 3*r, 8*h/32 - 3*1.7321*r );

33. addNewBall(16*w/32 - 3*r, 8*h/32 - 3*1.7321*r );

34. addNewBall(16*w/32, 8*h/32 - 4*1.7321*r );

35. addNewBall(16*w/32 - 2*r, 8*h/32 - 4*1.7321*r );

36. addNewBall(16*w/32 + 2*r, 8*h/32 - 4*1.7321*r );

37. addNewBall(16*w/32 - 4*r, 8*h/32 - 4*1.7321*r );

38. addNewBall(16*w/32 + 4*r, 8*h/32 - 4*1.7321*r );

39. addNewBall(16*w/32, 16*h/32 );

2.4 Итог работы

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

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

Список литературы

1. Баррет Д. JavaScript. Web-профессионалам. - Киев: БХВ - Киев, 2001.

2. Вайк А. JavaScript в примерах. - Киев: ДиаСофт, 2000.

3. Математическая теория явлений бильярдной игры. Г. Кориолис.

4. Ландау Л.Д., Лифшиц Е.М., Механика.

Размещено на Allbest.ru

...

Подобные документы

  • Создание игровой программы, реализующей игру в бильярд на компьютере. Математическое описание законов физики, определяющих траекторию движения шаров по бильярдному столу. Существующие аналоги разрабатываемого продукта. Алгоритмы игровой программы.

    контрольная работа [31,3 K], добавлен 25.07.2012

  • Стандартные процедуры и функции программы. Функция подсчёта шаров в одной линии. Воспроизведение анимации. Подсчёт проведённого в игре времени. Начисление очков. Реализация главного окна игры и перемещения шариков. Принципы составления фигур в линию.

    курсовая работа [555,7 K], добавлен 14.09.2013

  • Динамика движения материальной точки. Разработка программы, моделирующей траектории полета снаряда при стрельбе из пушки под заданным углом к горизонту. Ее структурная схема, системные требования к ней. Создание приложения в среде Borland C++Builder.

    курсовая работа [3,2 M], добавлен 10.06.2014

  • Создание модели с использованием шаблона, предложенного программой по умолчанию. Создание твердотельной модели. Построение траектории обработки и получение управляющей программы. Построение траектории обработки профиля. Отображение удаленного материала.

    курсовая работа [1,3 M], добавлен 25.07.2012

  • Основные компоненты системы X-Com. Иерархия узлов и серверов. Методы разбиения исходной задачи на блоки. Структуры данных сервера для хранения информации об узлах. Точки взаимодействия прикладной программы с системой X-Com. Фоновые процессы на сервере.

    лекция [217,2 K], добавлен 28.06.2009

  • Исследование основных требований к пользовательскому интерфейсу. Краткая характеристика используемой операционной системы Windows 7 и языка программирования. Особенность создания удобного управления в игре. Главные требования к аппаратному обеспечению.

    курсовая работа [453,0 K], добавлен 02.06.2017

  • Разработка эскизного и технического проектов программы, моделирующей игру "Кости". Постановка задачи, описание алгоритма; написание программы, организация входных и выходных данных; выбор программных средств; спецификация, текст, условия выполнения.

    курсовая работа [93,8 K], добавлен 11.02.2012

  • Изучение дисперсных систем и создание программы, реализующей метод Монте-Карло и моделирующей распределение частиц в определенной области. Исследование методов линейных итераций и вязкой суспензии. Характеристики распределения порошков по размерам.

    контрольная работа [1,4 M], добавлен 05.12.2014

  • Разработка информационной структуры, дизайна и информационное наполнение web-сайта, который предоставляет сведения участникам турниров юных математиков. Создание анимированного баннера, логотипа, шаблона сайта. Обзор графического программного обеспечения.

    дипломная работа [3,2 M], добавлен 15.05.2014

  • Разработка проекта системы, программы, интерфейса взаимодействия пользователя с системой. Программная база для реализации проекта "Электронная администрация". Создание удобной среды для пользователей системы. Разработка форм входных и выходных данных.

    дипломная работа [3,9 M], добавлен 20.06.2012

  • Особенности разработки программы в среде Delphi 7, которая предлагает случайно вычислить одну из последовательностей "рыбы" в игре Домино. Особенности создания интерфейсов для рабочей программы. Формальная постановка задачи. Руководство пользователя.

    курсовая работа [295,1 K], добавлен 19.10.2010

  • Эталонная модель взаимодействия открытых систем как главный принцип взаимодействия в сетях. Анализ особенностей взаимодействия разнотипных приложений в условиях различных стратегий передачи данных. Назначение уровней приложения, представления и сеанса.

    контрольная работа [13,9 K], добавлен 10.04.2013

  • Виды диаграмм взаимодействия. Создание и уничтожение объектов в процессе функционирования системы. Диаграмма кооперации как альтернативный вариант диаграммы последовательности. Линия жизни объекта. Порядок передачи сообщений, их расположение на диаграмме.

    презентация [458,6 K], добавлен 07.05.2014

  • Написание программы вывода графика функции с помощью точек и линий, модификация программы. Программа вывода каркаса вращающегося тора относительно своей оси с одновременным движением по заданной траектории. Создание эффекта сползания текстуры с цилиндра.

    контрольная работа [433,2 K], добавлен 01.12.2009

  • Принципы построения и программирования игр. Основы 2-3D графики. Особенности динамического изображения и искусственного интеллекта, их использование для создания игровых программ. Разработка логических игр "Бильярд", "Карточная игра - 50", "Морской бой".

    отчет по практике [2,3 M], добавлен 21.05.2013

  • Разработка приложения на WinAPI с реализацией логической структуры в игре "Сапер". Реализация графической части приложения. Проверка на корректность поведения интерфейса программы, работы логической части игры, корректности записи и чтения файла.

    курсовая работа [1,1 M], добавлен 17.10.2012

  • Создание системы, осуществляющей запуск программы по расписанию, которое хранится в реестре. Методы и средства взаимодействия с аппаратными и программными средствами, типы интерфейсов. Алгоритм работы и листинг программы, проверка ее работоспособности.

    курсовая работа [78,6 K], добавлен 13.11.2009

  • Согласование способа кодирования электрических сигналов, определение длины сообщений. Программная и аппаратная реализация коммуникационных протоколов. Модель взаимодействия открытых систем ISO/OSI. Уровни взаимодействия интерфейсов. Стек протокола TCP/IP.

    контрольная работа [189,1 K], добавлен 01.05.2015

  • Проектирование информационной системы. Анализ языков программирования и существующих решений для администрирования системы управления базами данных. Разработка модуля взаимодействия и структуры программы. Модули авторизации и соединения с базой данных.

    дипломная работа [4,1 M], добавлен 19.07.2014

  • Требования к серверной части программы. Blowfish c обратной связью по шифр-тексту. Процедура расширения ключа. Взаимодействия агентов в трёхмерном пространстве. Обоснование выбора среды программирования. Проверка выполнения функциональных требований.

    дипломная работа [3,6 M], добавлен 18.10.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.