我无法计算球撞击斜墙的反射角。我正在使用从本教程中提取的算法。它看起来像这样(在 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);
}
该函数返回新的速度矢量,并且对于与垂直壁的碰撞正确,但对于倾斜的壁则不正确。球可能会从“两侧”击中墙壁(即法线可能会朝另一个方向突出)。
谁能发现我的错误?或者建议更好的算法?