General > German corner

Berechnung Rotation

<< < (2/3) > >>

EgonOlsen:
-180°? Wie kannst du dich denn auf dem Feld bewegen und drehen? Schrittweise oder zumindest feldweise oder völlig frei?

Telix:
naja ich weiß ja nicht wie die figur grade steht und wohin sie grade schaut. (Sprich die Figur kann somit in 360° schauen)
Sprich ich müsste von der aktuellen ausrichtung wissen wie weit ich se drehen muss.

Das Schrittweise würde ich dann selbst machen, aber dafür müsste ich ja den "max" Wert wissen :)

EgonOlsen:
Ja, dann müsste das etwa sowas wie da oben sein. Das ist quasi der Winkel zwischen Figur (d.h. der Rotationsmatrix) und oben. Den Rest müsstest du dann selbst addieren. Diese Methode funktioniert aber nur, wenn die Drehung in einer Ebene bleibt.

Telix:
Irgendwie bin ich zu blöde :(

Was mach ich falsch?


--- Code: --- public void lookAt(SimpleCord pos) {
SimpleVector startVector = this.getRotationPivot();
SimpleVector endVector = new SimpleVector(pos.X * 2, startVector.y, pos.Y * 2);
Matrix mat = startVector.getRotationMatrix(endVector);
float angle = deriveAngle(mat);
rotateY(angle);
Log.w("ANGLE", Float.toString(angle));
}

public float deriveAngle(Matrix mat) {
float y = (float) Math.asin(Math.min(1f, Math.max(-1f, -mat.get(0, 2))));
float zd = mat.getZAxis().z;
if (zd < 0) {
     y = (float) (Math.PI / 2f + (Math.PI / 2f - y));
}
return y;
}
--- End code ---

EgonOlsen:
Du musst vor dem rotateY die alte Rotation zurücksetzen. Ansonsten addieren die sich. Das geht am schnellsten mit Object3D.clearRotation().

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version