斜めの壁に当たったボールの反射角の計算に問題があります。このチュートリアルから取り上げたアルゴリズムを使用しています。次のようになります (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);
}
この関数は新しい速度ベクトルを返します。これは、垂直な壁との衝突では正しく行われますが、斜めの壁では正しく行われません。ボールは両側から壁に当たることがあります (つまり、法線が反対方向に突き出ている可能性があります)。
誰でも私のエラーを見つけることができますか? または、より良いアルゴリズムを提案しますか?