Frage von Trachom, 37

Java schematic: wie dreht man sie?

Hey.. ich programmiere in spigot momentan ein Schematic-plugin und habe auch alles so weit fertig. Nur das problem ist, wenn ich eine schematic einfüge, wird sie immer in die gleiche Richtung platziert. Wie kann ich die schematics rotatieren?

code: save methode: pastebin.com/xMmc837N paste methode: pastebin.com/ydMrqYhF

Antwort
von valvaris, 27

Du musst das Byte-array, welches eine Matrix darstellt mit der Drehmatrix multiplizieren.

https://de.wikipedia.org/wiki/Drehmatrix#Drehmatrizen\_des\_Raumes\_.7F.27.22.60...

Schau mal in den Worldedit Quelllcode. Dort hast du das Rotate schon drin und musst es nur noch auf dein Projekt anpassen.

Oder du nimmst gleich die Worldedit-Api dafür. Die haben das für andere Pllugins extra öffentlich gemacht.

Kommentar von Trachom ,

Hmm, ich glaube, ich verstehe das noch nicht so ganz..

Ich habe ja x,y und z.

Wenn ich diese Werte um die X-Achse drehen will, muss ich den cos von X - den sin von X rechnen und den sin von X - den cos von X rechnen um den neuen X wert rauszubekommen?

Kommentar von valvaris ,

Das ist höhere Mathematik. Dein Array mit den Schema-Daten ist auch ne Matrix, allerdings sind die Zeilen hintereinander geschrieben. Teile das Array in 3 gleichgroße Teile. Beispielsweise bei Wolframalpha kannst du dir das dann einfach ausrechnen lassen. Oder du suchst dir aus dem Internet die Formel für Matrixmultiplikation.

Du musst die Daten zerlegen und in der Drehmatrix für Alpha deine 90°, 180° oder 270° einsetzen, je nachdem, wie weit du das Ding drehen willst. Also beispielsweise

1 0 0
0 cos90 -sin90
0 sin90 cos90

für 90° um die x-Achse gedreht.

Aber wie schon oben geschrieben, du kannst auch von Worldedit die Api nehmen, dann sparst du viel Rechnerei und viel Debugging, weils dort schon fertig ist.

Müsstest Worldedit nur in deine Entwicklungsumgebung einbinden und die .jar mit ausliefern.

Kommentar von Trachom ,

Nein, ich möchte das alles selber programmieren, sonst lerne ich es ja nicht.

Sind die Werte 1,0,0 als x,y und z dargstellt?

Kommentar von valvaris ,

in der Matrix stehen x, y und z jeweils in einer Zeile. Daher bruachst du zur Multiplikation auch eine Formel oder einen Algorytmus.

Kommentar von valvaris ,

Hier ist die Berechnung nochmal etwas leichter beschrieben.
http://www.mathebibel.de/drehmatrix

Kommentar von Trachom ,

Ich verstehe nicht, wo du die Werte 1,0 und 0 her hast. Ich habe mich noch nie mit Matrix etc. beschäftigt. Könntest du mir mal einen Beispielcode zeigen? Den von WorldEdit habe ich nicht gefunden.

Kommentar von valvaris ,

die 1 und 0 in der Drehmatrix sind fest definiert. Die stehen in dieser 3x3-Matrix einfach drin, damit die Rechnung aufgeht.

Laut Wiki stehn in dem Schematic die x-, y- und z-Koordinaten von allen Blöcken relativ drin, also nehm ich die mal als gegeben.
http://minecraft.gamepedia.com/Schematic_file_format

Drehung um 90° gegen den Urzeigersinn:

sin(90°) = 1 und cos(90°) = 0

x    1 0 0     1x + 0y + 0z    x
y * 0 0 -1 = 0x + 0y - 1z  = -z
z    0 1 0     0x + 1y + 0z    y

Ich habe jetzt mal den Daten-raussuchen-und-in-die-richtigen-variablen-sortieren-teil übersprungen und hab direkt die Rechnung dafür geschrieben.

Du musst also von einem Block die Koordinaten nehmen, y mit dem negativen z-Wert und z mit dem y-Wert ersetzen und bekommst die neue Position des Blocks, wenn er 90° um die x-Achse gedreht wurde.

Keine passende Antwort gefunden?

Fragen Sie die Community