2016-06-23 6 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 = anglesまたはdegs = angle/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) 

だろうが、ボールはそうであっても、式は最も浅い角度が、何のための余分な距離を過小、アークではなく、直進します。