2012-03-27 9 views
2

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

Интересно, есть ли какой-либо способ рассчитать градусы или угол, который мяч оправит после удара стены.

Пример, мяч двигается под определенным углом, мне интересно, как вычислить угол, когда я отказы

bollX += bollspeed*Math.cos(Math.toRadians(angle)); 
bollY += bollspeed*Math.sin(Math.toRadians(angel)); 

enter image description here

Спасибо за помощь.

+3

в = угол из – Nanne

+0

Если стены все вертикальные или горизонтальные, вы могли бы просто обратить х или скорость у, в зависимости на какую стену вы попадаете. – Derek

+0

Все они вертикальные и горизонтальные. Расчет, который я пытаюсь выяснить, заключается в том, что мяч перемещается на 315 градусов для проверки и отскока на горизонтальной (90 градусов) стене, он должен возвращаться назад в 275 градусов. –

ответ

1

Эта проблема проще, чем вы ее делаете. Вам вообще не нужно беспокоиться о углах, просто подумайте об этом с точки зрения компонентов. Когда мяч попадает на что-то с вертикальной стороны, x-составляющая его скорости перевернута. Когда мяч попадает на что-то на горизонтальной стороне, y-составляющая его скорости перевернута.

Например, псевдокод для обработки столкновений может выглядеть примерно так:

if (hits on left or right side of brick) 
    ball.velocity.x = -ball.velocity.x; 
else if (hits on top or bottom side of brick) 
    ball.velocity.y = -ball.velocity.y; 
endif 

Из кода при условии, что я не могу точно сказать, если у вас есть какие-то компоненты скорости, как это. Чтобы представить свою скорость, вы должны либо иметь угол и величину, либо компонент x и y. Если вы выбрали первое при разработке своей игры, я настоятельно рекомендую переключиться на компоненты, потому что это значительно упростит математику, потому что вы просто все равно преобразуете все в компоненты.

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

0

Вы должны знать единый нормальный вектор «n», который является перпендикулярным вектором к краю, на который шарик касается и возвращается назад, и (n & middot; n) = 1.

Если вы говорите, единичный вектор нормали п и ваш вектор скорости v затем ваш новый вектор скорости будет, v новый = v - 2 (v & Мидот; п) п, где жирные символы представляют векторы, и «& middot;» представляет собой точечный продукт.

Ниже линии связи является визуальное представление этого вычисления, который может дать более полное представление о угол http://mathworld.wolfram.com/images/eps-gif/Reflection2_751.gif