我試圖讓用戶畫一個可以用來擊球的球拍。不過,我似乎無法讓球正確彈跳,因爲球的速度的x和y分量並不與牆對齊。我怎樣才能解決這個問題?以任意角度從牆上彈出一個球?
我嘗試了Gareth Rees here給出的建議,但顯然我對足夠關注的向量不夠了解。例如,我不知道你在矢量中存儲的是什麼 - 我知道這是一個有方向的值,但是你存儲它的兩點,斜率,角度?
我真正需要的是在球擊中時給出牆的角度和x和y速度,以便找到新的x和y速度。
我試圖讓用戶畫一個可以用來擊球的球拍。不過,我似乎無法讓球正確彈跳,因爲球的速度的x和y分量並不與牆對齊。我怎樣才能解決這個問題?以任意角度從牆上彈出一個球?
我嘗試了Gareth Rees here給出的建議,但顯然我對足夠關注的向量不夠了解。例如,我不知道你在矢量中存儲的是什麼 - 我知道這是一個有方向的值,但是你存儲它的兩點,斜率,角度?
我真正需要的是在球擊中時給出牆的角度和x和y速度,以便找到新的x和y速度。
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)
。
如果表面是彎曲的,請使用接觸點處的法線。
一個很好的矢量教程在一個段落!您雖然不需要定義分割(對於查找單位向量是必需的),但不難想象應用了與產品相同的規則......只需簡單地將矢量的每個分量除以標量即可。 – MattJ 2012-11-12 05:00:39