2011-11-21 55 views
1
xVel = velocity * Math.cos(angle); 
yVel = velocity * Math.sin(angle); 

這是我用來將單個初始速度轉換爲x和y速度,使用用戶輸入的角度。偶爾xVel將是負面的。我想知道是否使用絕對值Math函數會很好,或者它會在數學上歪曲我的結果。創建一個非常簡單的大炮模擬器。偶爾會得到負x速度

這是我的想法爲:在Java中

xVel = velocity * Math.abs(Math.cos(angle)); 

編程順便說一句,儘管這並沒有真正在這種情況下,無所謂。

編輯:由於缺乏一些重要的信息,我會添加一些修訂。

偶爾我會輸入一個在正象限(即15°)內的角度值,但仍然會得到負xVel。

此外,該程序假設角度正在從x軸以逆時針方向向上計數。

+0

如果你得到你需要告訴我們一個否定的答案爲這_Input values_多數民衆贊成發生。 – Alnitak

+0

你是否將角度轉換爲弧度? 'Math.cos'需要以弧度表示的角度。 'radians = Math.PI *(以度數表示的角度)/ 180'。 – JohnPS

+0

在我自己面前犯了同樣的錯誤,我的錢就是對JohnPS的解釋。你應該只使用Math.toDegrees()! – vaughandroid

回答

5

由於Math.cos和Math.sin接受弧度而非度數的角度,因此您獲得15度角的負x速度。

您必須在您度角首先轉換成角的弧度是這樣的:

xVel = velocity * Math.cos(angle * Math.PI/180.0); 
yVel = velocity * Math.sin(angle * Math.PI/180.0); 
+0

非常感謝。優秀。非常感謝您的幫助。 – Slerig

0

速度是一個矢量,矢量有方向,以及用角度表示的大小。

如果您不關心在相關軸[右或左/上或下]中執行移動的方向,則可以使用絕對值。您實際得到的符號[減號/加號] [僅]表示左/右和上/下

0

也許您可以簡單地檢查角度是否在0和PI/2之間。你會對這兩種速度都有正面的價值。用戶輸入的角度如何?

1

我只是想知道你如何定義你的座標系並得到角度。如果你的角度在第二象限,那麼對XVel得到負值是非常合理的。

+0

我不一定限制它是積極的,但偶爾我得到一個從諸如15°的角度看負xVel。 – Slerig

0

如果他們以90 degrees < angle < 270 degrees角度發射大炮,那麼你的x座標將是負值。事實上,如果是這樣的話,他們實際上是在倒退。

有幾種方法可以限制這一點,但是我建議如果你想強制前進角度,防止它們旋轉超過90度。

0

相同角度的餘弦和鼻竇的跡象並不總是雙方的功能正(或負)。只要你在科學環境中使用函數(如公式),你應該驗證你是否沒有得到正確的結果呢?

在科學中,速度矢量的值可能小於零。

相關問題