Isometrisches Spielfeld die 2te |
29.01.2017, 20:17 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | Isometrisches Spielfeld die 2te Hallo, hab mich mit Transformationen im Grafischen Bereich von Java eingelesen und möchte nun folgendes in Anlehnung an einen früheren Post von mir machen: Zuerst erzeuge ich ein aus 10x10 Feldern bestehendes Spielfeld als zweidimensionales Rechteckarray. bestehendes Spielfeld. In meiner Zeichenmethode transformiere ich zuerst das Koordinatensystem so wie man es in der Schule hatte ( also erster Quadrant ). Anschließend erzeuge ich eine Rotation und eine Skalierung mittels AffineTransform() und wende die fertige dann auf das Spielfeld an. Zuletzt nun meine Frage: Was muss man tun, wenn man erreichen möchte, dass wenn man ein Feld anklickt die richtige Kachel ausgegeben wird? In meinem letzten Post hat ein sehr fitter Mensch mir eine Formel geliefert, wofür ich auch dankbar bin. Jetzt da ich ein wenig über Transformationen weiß, habe ich mir folgendes gedacht: Man könnte doch auch einfach die Kachel im ungedrehten Zustand berechnen lassen und diese dann anschließend wieder drehen, sodass , wenn man auf eine Kachel des Isometrischen Spielfeldes klickt eig. die orthogonale Variante berechnet wird aber dennoch das entsprechende isometrische Feld angezeigt wird. Falls jemand dazu eine Lösung weiß bitte melden, denn bei der Umsetzung harperts noch ziemlich. Zwar kann ich die gängigen Transformationen auf 2-dimensionale Körper anwenden aber die Reihenfolge der einzelnen Transformationen bereitet mir Kopfzerbrechen. MfG Tommy |
|||||
|
||||||
29.01.2017, 20:55 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | Noch ein kleiner Nachtrag: Wahrscheinlich hat das mit der Mausposition zu tun, denn die ist ja auf dem isometrischen Spielfeld eine andere als auf dem untransformierten. Wenn man da eine inverse Form braucht weiss ich allerdings nicht wie man diese auf das gesamte Spielfeld anwendet. |
|||||
30.01.2017, 07:38 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Nur mal, dass ich das richtig verstehe: du bist an der Funktion zur Umrechnung mittels verketteter Transformationen interessiert? Blau: Koordinaten in Java, schwarz dein Koordinatensystem. Die Frage zielt vor allem auf ab. falls du schon hast: die Transformationen der Reihe nach invertieren und die Reihenfolge umkehren: . Entschuldigung übrigens, dass ich deine Anfragen hier öfter mal ignoriere. Das ist einfach eine Zeitfrage. Wenn jemand eine Dezimalzahl in binär schreiben will, muss ich nicht lange überlegen, bei dir wird es meist aufwendiger. |
|||||
30.01.2017, 07:45 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | hhhhh, und ich hab ewig nichts gepostet weil ich dachte ich geh den leuten aufn sack hhhhh Also zurück zum Thema: Ja ich bin daran interessiert. Nun muss man also sowohl die Rotation, als auch die Skalierung invertieren und das ganze dann mittels inverser Matrix abbilden hab ich das richtig verstanden? mFg Tommy |
|||||
Anzeige | ||||||
|
||||||
30.01.2017, 07:49 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | Ach ja, wie heißt den die Funktion in Java für die inverse Matrix, denn es gibt da zwei die eine möchte Double Arrays die andere 2 Punkte? |
|||||
30.01.2017, 08:03 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Was die Java Bibliothek hergibt, weiß ich auch nicht ohne Recherche. Eben mal reingeschaut: es gibt ein concatenate, mit dem du mehrere verknüpfen kannst. Mit inverseTransform(Point2D ptSrc, Point2D ptDst) sollte für die Rücktransformation genügen (die Überladung mit Arrays rechnet mehrere Punkte gleichzeitig um, die hast aber nur einen Mauszeiger). Falls du trotzdem wissen willst, was passiert: die letzte Transformation (also t1 in meiner Formel) wird invertiert. Wenn du das auf den Punkt anwendest, erhältst du einen neuen Punkt. Auf diesen wendest du die inverse von t2 an. Und so weiter. |
|||||
30.01.2017, 19:12 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | Jetzt muss ich doch nochmal fragen: Zum einen wird das Feld ja gemalt und zum anderen wird das Feld berechnet. Hier mal mein Code für die Zeichen Methode:
Wenn ich jetzt die inverse Form berechnen will brauche ich also: Point2D p = Rotation.inverseTransform(new Point(mx,my),null); // ?????? |
|||||
30.01.2017, 21:44 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Könntest du bitte immer gleich so viel Code mit angeben, dass ich das in Eclipse reinkopieren und direkt ausführen kann, ohne noch eine GUI und einen MouseListener ergänzen zu müssen? Das reduziert meinen Arbeitsaufwand und erhöht deine Aussichten auf eine Antwort. Muss nicht das komplette Programm sein, falls du das nicht veröffentlichen willst oder es zu umfangreich ist. Aber lauffähig sollte es schon sein. |
|||||
31.01.2017, 10:12 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | Hier der Code:
Es sind 3 Klassen im package main. MapLooader kannst du erstmal übergehen. |
|||||
31.01.2017, 10:18 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | In Zeile 145 muss noch die Skalierung rein : scale = new AffineTransform(); scale.setToScale(2,1); rotation.preConcatenate(scale); und bei der Erzeugung der Rechtecke: also bei new Rectangle( i * 32 + 174,j * 32 -144,32,32); das wars. |
|||||
31.01.2017, 10:20 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | und bei trans rotation statt rotation1. das wars aber jetzt. |
|||||
31.01.2017, 10:25 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl |
und wo soll dieses new Rectangle sein? Aktuell sehe ich die rechte Hälfte eines um 90° gedrehten, nicht gestauchten Gitters (also Höhe und Breite eines Feldes sind gleich). |
|||||
31.01.2017, 14:34 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | bei field[i][j] = new Rectangle(); Wenn du Skype hast könnten wir skypen wäre um einiges einfacher.... |
|||||
31.01.2017, 14:38 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | In Skype heiße ich eulersche_Zahl. Mein Mirko geht nicht richtig, aber wir können ja auch chatten. |
|||||
31.01.2017, 15:42 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | habe ne kontaktanfrage gesendet mit namen Thomas |
|||||
01.02.2017, 08:03 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Bei mir kam nichts an, du hast eine private Nachricht gekriegt. Ansonsten kannst du mir auch deinen Nutzernamen geben. |
|||||
01.02.2017, 17:39 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | ... |
|||||
01.02.2017, 17:45 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Habe dich jetzt in Skype. Wenn du willst, kannst du deinen Namen hier wieder löschen. |
|||||
03.02.2017, 08:15 | Auf diesen Beitrag antworten » | |||||
Tommy1234 | ruf mal bitte an und send mir ne kontaktanfrage. |
|||||
03.02.2017, 09:39 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Ich habe dich schon in meiner Kontaktliste. Hatte dir auch schon geschrieben, habe dich aber nochmal angeklingelt. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|