У меня проблемы с вычислением углов отражения для шара, поражающего наклонную стену. Я использую алгоритм, взятый из этого урока . Это выглядит так (в Actionscript 3), где p1 - текущий вектор скорости, а p2 - нормаль стены:
private function getReflect2(p1 : Point, p2 : Point) : Point
{
var wallvec : Point = getNorm(p2);
var wallnorm : Point = p2;
var t : Number = dotProduct(wallvec, p1);
var n : Number = dotProduct(wallnorm, p1);
var vt : Point = new Point(wallvec.x * t, wallvec.y * t);
var vn : Point = new Point(wallnorm.x * -n, wallnorm.y * -n);
var vx : Number = dotProduct(new Point(1,0), vn) + dotProduct(new Point(1,0), vt);
var vy : Number = dotProduct(new Point(0,1), vn) + dotProduct(new Point(0,1), vt);
return new Point(vx, vy);
}
Функция возвращает новый вектор скорости и делает это правильно для столкновений с перпендикулярными стенками, но не для наклонных. Мяч может ударить по стене с обеих сторон (т. Е. Нормаль может выступать в другом направлении).
Может кто-нибудь заметить мою ошибку? Или предложить лучший алгоритм?