Расчет угла на подпрыгивающем мяче - PullRequest
2 голосов
/ 27 марта 2012

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

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

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

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

enter image description here

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

Ответы [ 2 ]

1 голос
/ 05 апреля 2012

Эта проблема намного проще, чем вы ее делаете.Вам вообще не нужно беспокоиться об углах, просто подумайте об этом с точки зрения компонентов.Когда мяч ударяется о что-то по вертикальной стороне, 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 голосов
/ 27 марта 2016

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

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

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

...