我無法計算球撞擊斜壁時的反射角度。我正在使用從這個tutorial解除的算法。它看起來像這樣(在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);
}
該函數返回新的速度矢量,所以正確地做與垂直的壁而碰撞不適合傾斜的人。球可能從兩側撞到牆上(即法線可能在另一個方向上伸出)。
任何人都可以發現我的錯誤嗎?或者建議一個更好的算法?
是啊,我甚至有一個調試模式顯示各種載體。唯一看起來不對的是外向的。 – friism 2008-12-27 23:54:52