# [Gelöst] Math.atan(.) gibt falsches Ergebnis



## Gachl (12. Feb 2009)

Hallo!
Ich versuche mir gerade ein kleines TD (Tower Defense) zu bauen und stosse auf ein Problem, das ich nicht gelöst kriege:
Ich habe einen Tower und einen Gegner in einem zweidimensionalen Koordinatensystem, woraus ja ein rechtwinkliges Dreieck entsteht. Bererchnet sind die Seiten a = 210, b = 120 und c = 241.87 und der Winkel gamma = 90°. Soweit mir bekannt muss ich um den Winkel alpha auszurechnen nun tan^-1(210/120) ( = 60.26 ) rechnen, in Java erfolgen Winkel ja in Radian, also ist das erwartete Ergebnis (laut meinem Taschenrechner voyage 200 UND google) 1.0517, in grad also die gewünschten 60.26°. Nun gibt mir Java aber mit der Math.atan(210/120)-Funktion nicht 1.0517 sondern 0.7854 zurück, was umgerechnet 45° (google) sind. Ist das ein Fehler von der Math.atan-Funktion oder macht die atan Funktion nicht das, was ich will oder hab ich einen Denkfehler?
Der Java-Code:

```
int a = 210;
int b = 120;
double alpha = Math.atan(a/b); // result: 0.7853981633974483
```
*JDK 1.6.0_12, Eclipse*
Danke an die, die helfen können!
Grüsse,
Gachl!


----------



## Ebenius (12. Feb 2009)

Alle Winkelfunktionen in der Math-Klasse sind im Bogenmaß. Konvertieren von Winkelgrad nach Bogenmaß mit der Math-Klasse.

Da das Problem oft besteht: Kann man nicht im Forum einbauen, dass dieser Hinweis immer automatisch hinzugefügt wird, wenn eine der Winkelfunktionen im Betreff eines Themas auftaucht? :lol:

Ebenius


----------



## Gachl (12. Feb 2009)

Ebenius hat gesagt.:
			
		

> Alle Winkelfunktionen in der Math-Klasse sind im Bogenmaß.


ich weiss, hab ich auch geschrieben, das ist nicht das problem
wie schon gesagt, ich erwarte den wert 1.05 (in bogenmass, also radian, das was java gibt, nicht in grad) bekommen tu ich aber 0.78 (in bogenmass, radian, nicht grad)
also ich beabsichtige bogenmass (radian) zu bekommen, aber eben 1.05 nicht 0.78


----------



## SlaterB (12. Feb 2009)

tztz,
wenn du schon von diesem Problem weißt, und einen Ausgabewert in Radian statt Grad akzeptierst, 
wieso denkst du dann nicht auch über die Eingabewerte nach?


----------



## Gachl (12. Feb 2009)

SlaterB hat gesagt.:
			
		

> wieso denkst du dann nicht auch über die Eingabewerte nach?


hast du eine konkrete idee, was an den eigabewerten falsch ist? ich nicht! die eingabewerte sind weder grad noch bogenmass, sondern eine division zweier längen (kein winkel), was ist daran falsch? *zumal noch google mit den gleichen eingabewerten das richtige ergebnis bringt!*
ich glaub ich hab die frage zu kompliziert formuliert

*Ich habe*: Ein Dreieck, bekannt sind Seite a = 210, b = 120 und c (Wert irrelevant) (in cm, pixel, liter, was ihr wollt, einfach in einem 2d Koordinatensystem) und der winkel gamma (90°, drum rechtwinkliges Dreieck)
*Ich will*: Winkel alpha in Bogenmass (radian, also das mit dem Java sowieso arbeitet)
*Ich mache*:
tan(alpha) = a/b
_umstellen zu_ tan^-1(a/b) = alpha
_entspricht_ double alpha = Math.atan(a/b)
*Erwartetes Ergebnis*: 1.05
*Bekommenes Ergebnis*: 0.78
Beweisquellen dafür, dass 1.05° Bogenmass DOCH richtig sind: Google & Taschenrechner
*Wo ist der Fehler?*


----------



## 0x7F800000 (12. Feb 2009)

oooh, siehe da, da hat einer ein "d" bzw "(double)" vergessen 

Noch ein Tipp nötig? implizite typanpassung


----------



## SlaterB (12. Feb 2009)

ok, da hast du doch mehr Recht als ich,
a und b ins Bogenmaß umgerechnet und durcheinander geteilt sollte das gleiche sein wie a/b,

das Problem ist in diesem Fall, dass int/int in Java gerundet wird,
210/120 = 1 und nicht korrekterweise 1.75

rechne dagegen beispielsweise
double x = a * 1.0 / b;
dann kommt auch ein double raus


----------



## Gachl (12. Feb 2009)

SlaterB hat gesagt.:
			
		

> das Problem ist in diesem Fall, dass int/int in Java gerundet wird


wahnsinn jetzt funktionierts. ich bin glaub ich ein wenig zu sehr php geschädigt, da hätt das so funktioniert
aber jetzt gehts auch hier, vielen dank!


----------

