# Java3D/Odejava - wie Winkel herausfinden?



## Tiava (12. Mrz 2008)

Grüßeuch!

Bin mit einem Freund gerade dabei ein nettes kleines Programm zu basteln, das es dem Benutzer ermöglichen soll, eine eigene KI zu einer Spielfigur zu schreiben, die sich in einer 3D-Umgebung bewegt. Allerdings stehen wir jetzt seit einigen Wochen vor einem ziemlich kniffligen Problem, bei dem uns nicht einmal unser Mathematik/Physik-Lehrer helfen kann. Vielleicht könnts ja ihr 

Unsere Figur ist eine Art "Spinne" (Rumpf, Kopf, 6 wiederum unterteilte Beine) und hat die Fähigkeit, durch Ausübung von Kraft auf ihre Gelenke sich fortzubewegen. Wie das genau geschieht, soll die KI übernehmen, und derzeit programmieren wir diverse Feedback-Methoden die es dem KI-Entwickler erleichtern sollen die richtigen Entscheidungen zu treffen. Soweit funktioniert alles perfekt, nur eben jenes Problem besteht:

Wie bekommt man stinknormale Winkel aus einem Body-Objekt heraus? Es gibt getRotation(), getQuaternion und getAxisAngle() aber keine der genannten Methoden liefert normale 0-360° Winkel. Da die Physik-Engine selbst Rotationen vornimmt können wir diese auch nicht mitprotokollieren. Hab die 9 Matrixfunktionen aufgelöst und mir damit die Winkel ausgedrückt, funktioniert auch nur hat acos und asin den Nachteil dass zwei Ergebnisse rauskommen sollen und woher soll man dann wissen welcher Winkel korrekt ist? Kann es wirklich sein, dass es keine einzige Methode gibt, den gebräuchlichsten Winkelsatz der "normalen" Menschheit herauszubekommen?

Wäre für jede Hilfe unglaublich dankbar!

Niki


----------



## Marco13 (12. Mrz 2008)

Wenn du etwas präziser beschreiben würdest, was der "_gebräuchlichste Winkelsatz der "normalen" Menschheit_" oder "_stinknormale Winkel_" oder auch nur ein "_Body-Objekt_" oder _"die 9 Matrixfunktionen"_ sind, könnte man da vielleicht auch drauf antworten.
Eine Rotation in 3D ist z.B. beschrieben durch eine Achse und einen Winkel. Der Winkel ist in diesem Fall eindeutig. Wenn du dir "irgendwoher" ein AxisAngle holen kannst, sollten da alle benötigten Informationen drinstecken...


----------



## Guest (14. Mrz 2008)

Majo als den normal gebräuchlichen Winkelsatz versteh ich den Winkel zwischen zwei Linien, ausgedrückt in 0-360° bzw. 0-2Pi. Bei dem AxisAngle-Objekt bekommt man 4 Werte heraus (Ein quat4f soweit ich mich erinnere) und nachdems eine 3D-Rotation ist hätt ich gerne die Winkel um die der Körper verdreht ist (sprich Winkel der Drehung um x, y, z-Achsen). Bei meiner Methode des Matrix-Zurückrechnens benötige ich allerdings asin() und acos(), was ein Problem darstellt:
Wenn du von im karthesischen Koordinatensystem im 1. Quadranten 2/2 -> 1 in den Sinus einsetzt kommt das selbe raus wie wenn du das im 3. Quadranten machst: -2/-2 -> 1. Beim asin(1) gibts also 2 Möglichkeiten was rauskommen kann und dieses Problem würd ich gern umgehn falls das möglich ist.

TivTöv


----------



## 0x7F800000 (14. Mrz 2008)

nun ja... eigentlich kann man das problem ganz einfach umgehen, in dem man eben die fallunterscheidungen macht... so tut es beispielsweise die funktion atan2(x,y) die gleich immer den korrekten winkel rausspuckt, in jedem quadranten...


----------

