2016-06-23 4 views
-1

Ich versuche, die zusätzliche Entfernung eines Golfschusses zu finden, die auftritt, weil die getroffenen Personen von einem höheren Boden als vom Boden aus getroffen werden. Ich habe die Gleichung; Nach Eingabe des Distanztreffers und des Schusswinkels ist jedoch alles, was ich angegeben habe, Tangens = 0. Gibt es etwas, das mir fehlt, um die Extra-Distanz angezeigt zu bekommen, nachdem ich das Programm ausgeführt habe?Trigonometrie-Entfernungssuche

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

Sie geben 'degs' niemals einen Wert, es ist also immer noch '0', wenn Sie' Math.tan (degs) 'aufrufen. Vielleicht wollten Sie etwas mit dem Winkel der Benutzereingabe tun? – azurefrog

+3

Achten Sie auch darauf, Ihren Winkel von Grad zu Bogenmaß zu konvertieren. Die trigonometrischen Methoden funktionieren nur im Bogenmaß. – Makoto

+0

Warum berechnen Sie extraDistance, dann ignorieren Sie diesen Wert und überschreiben es, indem Sie ein neues int vom Benutzer akzeptieren? – FredK

Antwort

0

tan (degs)? Siehe den Wert von degs. Es ändert sich nicht von 0 in Ihrem Programm. Bitte ändere es, indem du degs = angle oder degs = angle/pi machst.

1

degs wird nur auf 0 initialisiert und wurde nicht geändert. Der Tangens von 0 ist 0. Was Sie tun müssen, geben Sie deg einen Wert. Vielleicht benutze Benutzereingaben. Dann müssten Sie Grad in Radianten umwandeln, da die trigonometrischen Funktionen von Java Radianten als Parameter annehmen. Versuchen Sie Folgendes:

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

Oder in Ihrem Fall:

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

Für das Scannen der Grad:

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

auch etwas zu beachten: extraDistance berechnet wird, sondern durch die Benutzereingabe überschrieben . Stellen Sie sicher, die Verwendung von extraDistance zu überprüfen. Sie müssen auch die Logik und Korrektheit der Formel überprüfen, die Sie verwenden.

+0

Was schlagen Sie vor, dass ich meinen Initialisierungswert für Grad verwende, damit er sich ändern kann, je nachdem, was der Benutzer eingibt? –

+0

@ TaylorColeman Initialisieren es als 0 ist in Ordnung. Nach dem Speichern der Eingabe in DEGs sollte es gut funktionieren. Holen Sie sich die Benutzereingabe und setzen Sie degs gleich. Überprüfen Sie auch die Formel, die Sie für extraDistance verwenden – Li357

0
extraDistance = distanceX * (tanA * angle) 

Diese Gleichung ist so nicht korrekt. Die Multiplikation des Winkels mit seiner Tangente ist bedeutungslos. Ein naiver Ansatz wäre

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

sein, aber der Ball wird in einem Bogen reisen, keine gerade Linie, so dass selbst die Formel Untertreibung den zusätzlichen Abstand für alles andere als den flachsten Winkel.