Показать сообщение отдельно
  #1 (permalink)  
Старый 19.06.2014, 00:12
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

правильный алгоритм для реализации столкновений шара о стену
Всем привет, стоит задача реализовать простейшие столкновения шара о стены прямоугольника в котором он бесконечно движется (а в дальнейшем хочется развить это до биллиарда).

Шар движется прямолинейно, следовательно при ударе о стену отскакивать он будет под тем же углом который был до столкновения.
Пусть первое столкновения это тот момент, когда шар впервые начинает свое движение по прямоугольнику, начиная с этого момента и в процессе своего движения координаты x и y фиксируются в неком объекте состояния для определения направления отскока.
уточню последнее сказанное на примере:

1) если текущая координата х >= canvasWidth (это означает, что шар ударяется о правую стенку прямоугольника, либо летит в один из углов с правой стороны) - то делать что то с направлением отскока и зафиксировать х и у в объекте состояния.

2) если текущая координата y >= canvasHeight (это означает, что шар ударяется о нижнюю стенку прямоугольника, либо летит в нижний правый или левый угол) - то определить с помощью объекта состояний сторону(стенку) из которой шар двигался вниз и исходя из этого делать что то с направлением отскока, далее опять зафиксировать х и у в объекте состояний.

...

и так далее

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

Проблема в том, что этот алгоритм не могу до конца реализовать, потому что получаются по 4 по 5 проверок для каждой из сторон и код становится трудным.

Тоесть стало быть раз не получается реализовать, значит алгоритм неверный ?? но что в нем не так ?? подскажите верный алгоритм реализации этого дела ...
спасибо

p.s. использую HTML5 Canvas API без сторонних библиотек

Последний раз редактировалось Arramis, 19.06.2014 в 00:16.
Ответить с цитированием