1
我需要計算角度,通過球在該方向上給定的速度和投擲後應該着陸的點。如何計算投影在3D中的角度以在給定點步進的物體?
水平角度很容易(我們知道開始點和步驟點)。如何計算投影的垂直角度。有物體上應用肉汁。
旅行時間通常爲保齡球時間(球釋放時間和發生步數之間的時間)。
在unity3d中有直接的方法嗎?
觀看this視頻持續8秒,以清楚地理解此問題。
我需要計算角度,通過球在該方向上給定的速度和投擲後應該着陸的點。如何計算投影在3D中的角度以在給定點步進的物體?
水平角度很容易(我們知道開始點和步驟點)。如何計算投影的垂直角度。有物體上應用肉汁。
旅行時間通常爲保齡球時間(球釋放時間和發生步數之間的時間)。
在unity3d中有直接的方法嗎?
觀看this視頻持續8秒,以清楚地理解此問題。
根據維基百科頁面Trajectory of a projectile,該 「範圍的角度」(你想知道的角度)的計算方法如下:
θ= 1/2 * ARCSIN(GD /V²)
在這個公式中,g是引力常數9.81,d是你想讓彈丸傳播的距離,v是物體投擲的速度。
代碼來計算,這可能是這個樣子:
float ThrowAngle(Vector3 destination, float velocity)
{
const float g = 9.81f;
float distance = Vector3.Distance(transform.position, destination);
//assuming you want degrees, otherwise just drop the Rad2Deg.
return Mathf.Rad2Deg * (0.5f * Asin((g*distance)/Mathf.Pow(velocity, 2f)));
}
這會給你假設沒有空氣阻力等,存在於你的遊戲的角度。 如果您的目的地和您的「投擲點」不在同一高度,您可能需要先設置y = 0,否則可能會發生錯誤。
編輯:
考慮到你的啓動點了比目標更高,在同一頁面這個公式應該工作:
θ=反正切(V²(+/-)√(V^g(gx 2 + 2yv 2))/ gx)
這裏,x是距離或距離,y是高度(相對於發射點)。
代碼:
float ThrowAngle(Vector3 start, Vector3 destination, float v)
{
const float g = 9.81f;
float xzd = Mathf.Sqrt(Mathf.Pow(destination.x - start.x, 2) + Mathf.Pow(destination.z - start.z, 2));
float yd = destination.y - start.y;
//assuming you want degrees, otherwise just drop the Rad2Deg. Split into two lines for better readability.
float sqrt = (Mathf.Pow(v,4) - g * (g*Mathf.Pow(xzd,2) + 2*yd*Mathf.Pow(v,2))/g*xzd);
//you could also implement a solution which uses both values in some way, but I left that out for simplicity.
return Mathf.Atan(Mathf.Pow(v, 2) + sqrt);
}
沒有既不能以相同的高度。投影在某個高度開始,目標點在地面上,如視頻中所示,與保齡球(球移動)相同。 – djkp
該文章有一部分不是從y = 0開始,而是有y = 0的着陸點。(你可以把最低點看作y = 0,我想如果實際上沒有一個是y = 0)。只需看右邊的圖形即可找到正確的公式。 –
正在撰寫答案。請給我一點時間。 –