Страница 1 из 1

Задача 4 (Мастер биллиарда)

СообщениеДобавлено: 04 апр 2015, 10:26
Vladislav_133
Здесь будет обсуждение

Re: Задача 4 (Мастер биллиарда)

СообщениеДобавлено: 08 апр 2015, 09:25
Vladislav_133
Ну начнем с картинки.

Re: Задача 4 (Мастер биллиарда)

СообщениеДобавлено: 08 апр 2015, 09:42
Vladislav_133
Главное здесь уравнение прямой и игра с углами.

Если известна точка и угол направления (к оси X) то уравнение прямой:

(y-y1) = (x-x1) * tg(alfa)

зная уравнение можно найти пересечение с любой из сторон:
1:
x=0; y=y1-x1*tg(alfa)
2:
y=b; x=(b-y1)/tg(alfa)+x1
3:
x=a; y=y1+(a-x1)*tg(alfa)
4:
y=0; x=(-y1)/tg(alfa)+x1;

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

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

С углами тоже очень интересно. Во-первых, удобно оперировать углом 0<=alfa<=180.
Я так в свое программе и делаю. Оказывается при ударе о любую стенку угол (относительно оси X) меняется
по формуле: 180-alfa.

Вот собственно и вся теория. Дальше надо писать программу.

Re: Задача 4 (Мастер биллиарда)

СообщениеДобавлено: 08 апр 2015, 14:38
Vladislav_133
Не оптимизированный текст программы я выкладываю, как прикрепленный файл.
Кому интересно, можно с ним поработать. Но показывать я его не показываю, чтобы не демонстрировать
ужасный стиль программирования ;) . Оптимизированный вариант выложу на днях.