2016-06-23 95 views
-1

我正試圖找到高爾夫擊球的額外距離,這是因爲擊中的人比地面高度更高。我有等式;然而,在進入距離命中和射門角度之後,我給出的所有數據都是切線= 0。在我運行該程序之後,爲了能夠顯示額外的距離,是否有一些我錯過了?三角距離發現

public class HittingBay { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 

     double distanceX = 0; 
     double radians = 0; 
     double extraDistance = 0; 
     double rads; 
     double degs = 0; 
     double tanA = 0; 
     double angle = 0; 

     System.out.println("Enter in distance hit"); 
     distanceX = scan.nextInt(); // distanceX means how far shot track man thought 
     System.out.println("Enter in angle of shot"); 
     angle = scan.nextInt(); 

     // Calculate tangent 
     tanA = Math.tan(degs); 
     System.out.println("Tangent = " + tanA); 

     extraDistance = distanceX * (tanA * angle); 
     extraDistance = scan.nextInt(); 
     System.out.println("extra distance= " + extraDistance); 
    } 
} 
+7

你永遠不會給'degs'賦值,所以當你調用'Math.tan(degs)'時它仍然是'0'。也許你打算用用戶輸入的角度做點什麼? – azurefrog

+3

也一定要將你的角度從度數轉換爲弧度。三角函數法只能以弧度正確工作。 – Makoto

+0

爲什麼要計算extraDistance,然後忽略該值並通過接受用戶的新int來覆蓋它? – FredK

回答

0

tan(degs)?查看degs的值。它不會在程序中從0改變。請通過使degs =角度或degs =角度/ pi來更改它。

1

degs只被初始化爲0並且沒有被改變。 0的正切值爲0.你需要做的是給deg一個值。也許,使用用戶輸入。然後,您需要將度數轉化爲弧度,因爲Java的三角函數以弧度爲參數。請嘗試以下操作:

double tanResult = Math.tan(Math.toRadians(degs)); 

或者你的情況:

tanA = Math.tan(Math.toRadians(degs)); 

爲了掃描度:

System.out.println("Enter Degrees: "); 
degs = scan.nextDouble(); 

也未嘗要注意:extraDistance被計算,而是由用戶輸入覆蓋。確保驗證使用extraDistance。您還必須驗證您正在使用的公式的邏輯和正確性。

+0

你建議我使用什麼作爲我的初始化度數值,以便能夠根據用戶輸入的內容進行更改? –

+0

@TaylorColeman將它初始化爲0即可。將輸入存儲爲degs後,它應該可以正常工作。獲取用戶輸入並將degs設置爲等於此值。另外,請檢查您用於extraDistance的公式 – Li357

0
extraDistance = distanceX * (tanA * angle) 

這個等式是不正確的。將角度乘以其切線是沒有意義的。一個天真的做法是

extraDistance = distance * (Math.sec(angle_in_radians) - 1) 

,但球會呈弧形,不是一條直線行進,因此即使該公式低估任何東西,但最淺的角度額外的距離。