forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Arcanoid (http://forum.boolean.name/showthread.php?t=17481)

Volcano 05.11.2012 15:36

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

Нужен алгоритм аракноида в 2д, а именно угол на который нужно отправлять шар при столкновении.

У меня есть ветктор направления шарика, и есть обьект, стенка с которой он сталкивается.

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

Сначала я узнаю угол между обьектом и шаром при столкновенни при помощи функции ATan2.

Угол/столкновение есть, а как узнать на какой именно угол шар отправить дальше уже забыл. Спасибо.

Видел похожую тем в разделе блитц3д, но в максе таких команд нету, возможно и подход другой.

moka 05.11.2012 15:44

Ответ: Arcanoid
 
Тебе нужно найти перпендикуляр от плоскости от которой отражаешь вектор, и затем вычислить угол между перпендикуляром и вектором скорости шарика, и затем инвертировать его параллельно перпендикуляру.
Если у тебя плоскость в арканойде всегда горизонтальна, то просто отражай Y (инвертируй).
Если же не всегда горизонтальна, то как сказал выше.
Далее в арканойде обычно градус отскока зависит от места относительно середины платформы куда попадает шарик. Тут всё просто - чем левее попадает, тем левее наколнён перпендикуляр, и правее - наоборот.
Ты можешь даже обойтись без градусов, просто инвертируй Y и умножай на коэффициент левее / правее (0.5 - 1.0 - 1.5) - (левее, центр, правее) X вектора, таким образом будешь изменять вектор направления. Этот коэффициент должен быть плавным а не по условию.

Volcano 05.11.2012 15:57

Ответ: Arcanoid
 
Спасибо!

С падлом(платформа), примерно знаю как дела обстоят, но всеравно спасибо вам Мока!

Если подкажете еще как правильно инвертировать, буду благодарен еще больше еще немножко и начну бросать деньгами в монитор)

ап.
Думаю розберусь и сам, что же это я, сначала одну задачку списал, теперь уже и по вторую потянулся...спасибо влюбом случае.

moka 05.11.2012 16:51

Ответ: Arcanoid
 
Любопытство - это отлично, только ещё нужно и самостоятельность - тогда будет много прогресса и роста в способностях и знаниях.
Ответы от других людей, дают знания, но не улучшают способностей. Знания без способностей - не применимы.

Если хочешь отразить вектор от горизонтальной плоскости, тогда просто Y = -Y;
Если Y был больше нуля, то он станет отрицательным, и наоборот - если Y меньше нуля, - на - будет +.
Для отражения от вертикальной плоскости - то же самое но для X.

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


Часовой пояс GMT +4, время: 07:46.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot