2012-04-06 26 views
2

我試圖讓用戶畫一個可以用來擊球的球拍。不過,我似乎無法讓球正確彈跳,因爲球的速度的x和y分量並不與牆對齊。我怎樣才能解決這個問題?以任意角度從牆上彈出一個球?

我嘗試了Gareth Rees here給出的建議,但顯然我對足夠關注的向量不夠了解。例如,我不知道你在矢量中存儲的是什麼 - 我知道這是一個有方向的值,但是你存儲它的兩點,斜率,角度?

我真正需要的是在球擊中時給出牆的角度和x和y速度,以便找到新的x和y速度。

回答

6

Gareth Rees得到了正確的公式,但我發現圖片和解釋here更清楚一點。也就是說,基本公式爲:

Vnew = -2*(V dot N)*N + V 
where 
V = Incoming Velocity Vector 
N = The Normal Vector of the wall 

既然你不熟悉的矢量符號,這裏就是你需要知道這個公式是什麼:矢量基本上只是X,Y對,所以V = (v.x, v.y)N = (n.x, n.y)。平面最好用平面法線來描述,即垂直於平面的單位長度矢量。然後幾個公式,b*V = (b*v.x, b*v.y); V dot N = v.x*n.x+v.y*n.y,這是一個標量;和A + B = (a.x+b.x, a.y+b.y)。最後,要找到基於任意向量的單位向量,它是N = M/sqrt(M dot M)

如果表面是彎曲的,請使用接觸點處的法線。

+0

一個很好的矢量教程在一個段落!您雖然不需要定義分割(對於查找單位向量是必需的),但不難想象應用了與產品相同的規則......只需簡單地將矢量的每個分量除以標量即可。 – MattJ 2012-11-12 05:00:39