правильный алгоритм для реализации столкновений шара о стену
Всем привет, стоит задача реализовать простейшие столкновения шара о стены прямоугольника в котором он бесконечно движется (а в дальнейшем хочется развить это до биллиарда).
Шар движется прямолинейно, следовательно при ударе о стену отскакивать он будет под тем же углом который был до столкновения.
Пусть первое столкновения это тот момент, когда шар впервые начинает свое движение по прямоугольнику, начиная с этого момента и в процессе своего движения координаты x и y фиксируются в неком объекте состояния для определения направления отскока.
уточню последнее сказанное на примере:
1) если текущая координата х >= canvasWidth (это означает, что шар ударяется о правую стенку прямоугольника, либо летит в один из углов с правой стороны) - то делать что то с направлением отскока и зафиксировать х и у в объекте состояния.
2) если текущая координата y >= canvasHeight (это означает, что шар ударяется о нижнюю стенку прямоугольника, либо летит в нижний правый или левый угол) - то определить с помощью объекта состояний сторону(стенку) из которой шар двигался вниз и исходя из этого делать что то с направлением отскока, далее опять зафиксировать х и у в объекте состояний.
...
и так далее
тоесть при каждом определении момента удара шара о стену эти координаты х и у фиксируются чтобы была возможность выбрать нужное направление отскока (например если шар ударяется в правую стенку, отскакивая сверху, то следующий отскок будет влево и вниз, если шар ударяется в правую стенку снизу то отскок будет вверх и влево и т.д.)
Проблема в том, что этот алгоритм не могу до конца реализовать, потому что получаются по 4 по 5 проверок для каждой из сторон и код становится трудным.
Тоесть стало быть раз не получается реализовать, значит алгоритм неверный ?? но что в нем не так ?? подскажите верный алгоритм реализации этого дела ...
спасибо
p.s. использую HTML5 Canvas API без сторонних библиотек
Последний раз редактировалось Arramis, 19.06.2014 в 00:16.
|