Эта проблема проще, чем вы ее делаете. Вам вообще не нужно беспокоиться о углах, просто подумайте об этом с точки зрения компонентов. Когда мяч попадает на что-то с вертикальной стороны, 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. Если вы выбрали первое при разработке своей игры, я настоятельно рекомендую переключиться на компоненты, потому что это значительно упростит математику, потому что вы просто все равно преобразуете все в компоненты.
Обратите внимание, что этот ответ предполагает, что вы только откажетесь ровно горизонтально или вертикально.
в = угол из – Nanne
Если стены все вертикальные или горизонтальные, вы могли бы просто обратить х или скорость у, в зависимости на какую стену вы попадаете. – Derek
Все они вертикальные и горизонтальные. Расчет, который я пытаюсь выяснить, заключается в том, что мяч перемещается на 315 градусов для проверки и отскока на горизонтальной (90 градусов) стене, он должен возвращаться назад в 275 градусов. –