Правила проведения олимпиады, условия задач и комментарии к ним, результаты олимпиады и апелляции. Руководители: к.ф-м.н., профессор Пирогов Владислав Юрьевич, ник - Vladislav_133; к.п.н, доцент Слинкин Дмитрий Анатольевич, ник - xdsl
Если известна точка и угол направления (к оси 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.
Вот собственно и вся теория. Дальше надо писать программу.
Не оптимизированный текст программы я выкладываю, как прикрепленный файл. Кому интересно, можно с ним поработать. Но показывать я его не показываю, чтобы не демонстрировать ужасный стиль программирования . Оптимизированный вариант выложу на днях.