AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
at.createTransformedShape(s1);
at = new AffineTransform();
at.translate(70, -10);
at.createTransformedShape(s2);
Aber warum erstelle ich ein neues? Also wozu hier? Also wi rmachen ja erst eine AffineTransofrmation, dann machen wir s=..., mit der Affinentransformation, danach mach eich eine neue Affinetransformation und überscheribe s, dann werden doch die zwei anderen Affinentransformationen nicht mehr beachtet? Also hätte man die nie erstellt oder nicht?at.translate(...) ändert das AffineTransform-Objekt.
Deshalb wird danach ein neues erstellt.
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
at.translate(70, -10);
s2 = at.createTransformedShape(s1);
Also mein Verständnisproblem ist, warum mach ich dann überhaupt die davorige Affinetransformation, wenn ich dei eh überschreibe und die dann nicht mehr angwendet wirdat.translate(...) ändert das AffineTransform-Objekt.
Deshalb wird danach ein neues erstellt.
Aber unser Prof macht das nie so, so sieht das logisch ausDer in deinem ersten Post gezeigte Code sollte eigentlich äquivalent sein zu:
weil man affine Transformationen ja auch konkatenieren kann.Java:AffineTransform at = new AffineTransform(); at.rotate(Math.PI / 2.0, 20, 60); at.translate(70, -10); s2 = at.createTransformedShape(s1);
Brauchst du meiner Meinung nach nicht zu tun. Du brauchst nur genau eine AffineTransform-Instanz, auf der du die beiden affinen Operationen konkatenierst und dann das Ergebnis auf das Shape anwendest.Also mein Verständnisproblem ist, warum mach ich dann überhaupt die davorige Affinetransformation, wenn ich dei eh überschreibe und die dann nicht mehr angwendet wird
Ja, da kann ich doch nix für.Aber unser Prof macht das nie so
Weißt Du auch zufällig wie ich das mache, wenn ich z. B. 3 AffineTransformationen a, b und c und ich möchte, dass jetzt a die Affinentransformationen von b und c erhält, ich habe gesehen, dass manche concatinate da nutzen, aber gibt es auch eine andere Möglichkeit?Brauchst du meiner Meinung nach nicht zu tun. Du brauchst nur genau eine AffineTransform-Instanz, auf der du die beiden affinen Operationen konkatenierst und dann das Ergebnis auf das Shape anwendest.
AffineTransform a1 = new AffineTransform();
a1.translate(...);
AffineTransform a2 = new AffineTransform();
a2.rotate(...);
AffineTransform a3 = new AffineTransform();
a3.scale(...);
// irgendwann später:
AffineTransform ergebnis = new AffineTransform();
ergebnis.concatenate(a1);
ergebnis.concatenate(a2);
ergebnis.concatenate(a3);
AffineTransform ergebnis = new AffineTransform();
ergebnis.translate(...);
ergebnis.rotate(...);
ergebnis.scale(...);
Das die Bewegung Animation wider auf null gesetzt sind.Oder hier gleich 3x
Anhang anzeigen 17527
Das gleiche at, aber es wird 2x zusätzlich newAffineTransform() gemacht, obwohl wir das schon hatten, was bewirkt das?
(Sorry, dass ich das als extra Beitrag schreibe, aber die Bearbeitungsfrist ist abgelaufen und ich glaube hier ist es klarer, was ich zu erfrgaen versuche)
in dem „at“ ist ja das drehen gespeichert was du auf „ s1“ ausführst .
Aber da steht doch garnicht s1 oder s2, da steht nur s?in dem „at“ ist ja das drehen gespeichert was du auf „ s1“ ausführst .
ohne das neue Objekt „at“ (rücksetzen)
würdest du das drehen auch die „s2“ ausführen das willst du aber nur verschieben nicht drehen.
Deshalb ein neues Objekt oder den gespeicherten Inhalt von dem at löschen.
Da ist ein neues einfacher. Ob es dafür eine Methode gibt, habe ich nicht in der Doku nach geschaut.
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
at.createTransformedShape(s1);
at = new AffineTransform();
at.translate(70, -10);
at.createTransformedShape(s2);
ACH, das habe ich garnicht gesehen, vielen Dank!Java:AffineTransform at = new AffineTransform(); at.rotate(Math.PI / 2.0, 20, 60); at.createTransformedShape(s1); at = new AffineTransform(); at.translate(70, -10); at.createTransformedShape(s2);
s1 und s2 sind deine Objekte auf die du es anwendest zb ein Dreieck und ein Rechteck.
ohne das "new" würde das s2 sich auch drehen.
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
at.translate(70, -10);
s2 = at.createTransformedShape(s1);
Der Code ist einfach kompletter Unsinn. Denn createTransformedShape() liefert dir das _neue_ veränderte Shape zurück. Die Methode verändert _nicht_ das übergebene Shape.Java:AffineTransform at = new AffineTransform(); at.rotate(Math.PI / 2.0, 20, 60); at.createTransformedShape(s1); at = new AffineTransform(); at.translate(70, -10); at.createTransformedShape(s2);
s1 und s2 sind deine Objekte auf die du es anwendest zb ein Dreieck und ein Rechteck.
ohne das "new" würde das s2 sich auch drehen.
Er wollte wissen, warum in dem ganz konkret von ihm in Post #1 geschriebenen Code zwei Objekte erzeugt wurden.Wann und warum es Sinn macht ein neues Objekt zu ersten.
Das wollte er ja wissen.
Anhang anzeigen 17522
Hi, was ich mich frage, warum wurde hier 2x die gleiche AffineTransformation erstellt?
Also es wurde ja eine am Anfang erstellt at und danach wurde wieder at = new affine... gemacht? Warum/wozu?
Wie kommst du denn darauf?Das dehen wird doch ohne neuem Objekt zweimal ausgeführt bin ich da nicht bei pi halbe wider am Anfang?
180 grad beim ersten ohne new nochmal 180 grad. + verschieben
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
// rotation auf s1 anwenden. Ergebnis in s2 merken:
s2 = at.createTransformedShape(s1);
// neues identity AffineTransform erzeugen (hat natürlich _nicht_ mehr die Rotation von vorhin):
at = new AffineTransform();
at.translate(70, -10);
// Translation auf s2 anwenden. Ergebnis in s2 merken.
s2= at.createTransformedShape(s2);
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
at.translate(70, -10);
// Rotation und Translation auf s1 anwenden. Ergebnis in s2 merken.
s2 = at.createTransformedShape(s1);
interpretieren sollen, bzw. "Was ist denn die Alternative?"warum wurde hier 2x die gleiche AffineTransformation erstellt?
AffineTransform at = new AffineTransform()
at.rotate(Math.PI / 2.0, 20, 60);
s2 = at.createTransformedShape(s1);
//at = new AffineTransform();
at.translate(70, -10);
s2= at.createTransformedShape(s2);
Du verwendsest die veränderte ja einmal. Für das nächste Objekt erstellst du eine neue.Also mein Verständnisproblem ist, warum mach ich dann überhaupt die davorige Affinetransformation, wenn ich dei eh überschreibe und die dann nicht mehr angwendet wird
Das zweite markierte könnest du weglassen.Vielen Dank euch, mal eine Frage dazu:
Anhang anzeigen 17545
Hätte man sich hier:
das sparen können auch new AffineTransform zu machen? Weil ich wende es ja auf das gleiche oder?
s= at.createTransformedShape(s);
// ist das geiche wie
Shape s2 = at.createTransformedShape(s);
s=s2;