Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 19.06.2014, 05:07
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

В простейшем случае движение можно представить как смещение по x и y на определенную величину (отдельную для x и y). Соответственно для равномерного движения можно просто менять при соударениях соответствующую величину смещения на противоположную. Но бильярд так не сделаешь. Тут надо подключать векторы и линейную алгебру. В общем, это на геймдев форумах всё обсуждается. Но понадобится матчасть.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу знатока JS, Node.Js для реализации чата Зафар Гильфанов Работа 2 22.03.2014 14:40
Подскажите технологию для реализации. sektor-sumy Общие вопросы Javascript 3 11.04.2013 23:49
Подскажите технолию/фреймворк для реализации Akademik Общие вопросы Javascript 3 19.09.2012 18:36
Сервисы для реализации оплаты кредитками на сайте. nyols Серверные языки и технологии 1 29.05.2011 13:44
Нужна помощь для реализации функции d'n'd vaal Элементы интерфейса 4 09.06.2010 17:27