Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)?

uuqfowehui23

Aktives Mitglied
1643858889088.png

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?
 
Beste Antwort
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.

uuqfowehui23

Aktives Mitglied
Oder hier gleich 3x
1643860851205.png
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)
 

uuqfowehui23

Aktives Mitglied
at.translate(...) ändert das AffineTransform-Objekt.
Deshalb wird danach ein neues erstellt.
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?
 

httpdigest

Top Contributor
Der in deinem ersten Post gezeigte Code sollte eigentlich äquivalent sein zu:
Java:
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
at.translate(70, -10);
s2 = at.createTransformedShape(s1);
weil man affine Transformationen ja auch konkatenieren kann.
 

httpdigest

Top Contributor
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
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.
 

uuqfowehui23

Aktives Mitglied
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.
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?
 

httpdigest

Top Contributor
Wenn du _nur_ 3 AffineTranform Instanzen hast (und nicht weißt, wie diese erzeugt wurden), dann _musst_ du AffineTransform.concatenate() verwenden.
Wenn du aber sowas hast wie:
Java:
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);
dann kannst du natürlich auch nur _eine_ AffineTransform Instanz bauen, und die elementaren Operationen darauf ausführen:
Java:
AffineTransform ergebnis = new AffineTransform();
ergebnis.translate(...);
ergebnis.rotate(...);
ergebnis.scale(...);
 

Jw456

Top Contributor
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)
Das die Bewegung Animation wider auf null gesetzt sind.
Würdest du kein neues Objekt erstellen würde dein letztes Grafik-Objekt alle drei Bewegungen machen. drehen, verschieben und skalieren . gleichzeitig
 

Jw456

Top Contributor
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.
 
Zuletzt bearbeitet:

uuqfowehui23

Aktives Mitglied
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.
Aber da steht doch garnicht s1 oder s2, da steht nur s?
 

Jw456

Top Contributor
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.
 
Beste Antwort

uuqfowehui23

Aktives Mitglied
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.
ACH, das habe ich garnicht gesehen, vielen Dank!
 

httpdigest

Top Contributor
Das ist doch _genau_ dasselbe, als hättest du:
Java:
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
at.translate(70, -10);
s2 = at.createTransformedShape(s1);
gemacht. Wenn wir von deinem ersten Post ausgehen, dann wendest du die erste Transformation auf s1 an und erhältst s2.
Dann wendest du die zweite Transformation auf s2 an und nutzt das als neues s2.
Du wendest also beide Transformationen _nacheinander_ effektiv auf s1 an.
 

httpdigest

Top Contributor
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.
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.
 

Jw456

Top Contributor
Java:
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 2.0, 20, 60);
s1= at.createTransformedShape(s1);

at = new AffineTransform();
at.translate(70, -10);
s2= at.createTransformedShape(s2);
 

httpdigest

Top Contributor
Wann und warum es Sinn macht ein neues Objekt zu ersten.
Das wollte er ja wissen.
Er wollte wissen, warum in dem ganz konkret von ihm in Post #1 geschriebenen Code zwei Objekte erzeugt wurden.
So steht es da:
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?

Und die einzige Antwort darauf ist: "Es macht dort (und genau dort) so wie gezeigt keinen Sinn."
Fertig aus.
 

Jw456

Top Contributor
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
 

httpdigest

Top Contributor
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
Wie kommst du denn darauf?
Nochmal:
Folgende zwei Varianten sind exakt identisch:
Java:
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);

und:

Java:
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);
 

httpdigest

Top Contributor
Ich glaube, das Problem aktuell ist, wie wir genau die Frage:
warum wurde hier 2x die gleiche AffineTransformation erstellt?
interpretieren sollen, bzw. "Was ist denn die Alternative?"
Natürlich ist die Alternative _nicht_, einfach _nur_ die Zeile mit der zweiten Instanziierung `at = new AffineTransform();` wegzulassen.
Es _ginge_ aber eben wie gesagt auch ohne zweite Instanz. Aber nicht, indem man _nur_ die Instanziierung weglässt.
 

Jw456

Top Contributor
Java:
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);

Hier wird das shape zweimal gedreht um pi/2 was das jetzt in grad ist?

Das soll wahrscheinlich nicht sein.

Deshalb das neue Objekt von AffineTransform()
Damit es nicht zweimal gedreht wird.

Das drehen ist ja beim zweiten anwenden von "at" (ohne new) noch enthalten.
 
Zuletzt bearbeitet:

uuqfowehui23

Aktives Mitglied
Vielen Dank euch, mal eine Frage dazu:
1643939117469.png
Hätte man sich hier:
1643939148971.png
das sparen können auch new AffineTransform zu machen? Weil ich wende es ja auf das gleiche oder?
 

Anhänge

  • 1643939146078.png
    1643939146078.png
    69,5 KB · Aufrufe: 0

Jw456

Top Contributor
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?
Das zweite markierte könnest du weglassen.
Da du ja das Verschieben in der AT veränderst mit "at.translate(… "


Beim dritten würdest du es nochmal nach oben auf der Y Achse verschieben da ohne das „new“ das Verschieben noch aktiv ist. Und du dem AT noch das drehen hinzufügst.



Tipp probiere es doch einfach aus. Dann siehst du es.
 

Jw456

Top Contributor
Java:
s= at.createTransformedShape(s);
// ist das geiche wie
Shape s2 = at.createTransformedShape(s);
s=s2;

Du übergibst ein Shape und bekommst ein verändertes Shape zurück.
Da zuerst der rechte Teil vom „=“ ausgeführt wird , kann mit der Zuweisung (=) das zurückgebe (veränderte Shape) sich auch selbst zugewiesen werden.

Am ende hast du dein Shape verändert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
G JavaFX LineChart Datenpunkte Markierung wird abgeschnitten AWT, Swing, JavaFX & SWT 1
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
N €-Zeichen wird nicht akzeptiert AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
ProggersWorld JavaFX TextArea BackgroundImage wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
izoards Outlook Mail erstellen - Signatur wird nicht angezeigt. AWT, Swing, JavaFX & SWT 3
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
S Next_Button wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 6
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
J setOnCloseRequest wird nicht ausgelöst AWT, Swing, JavaFX & SWT 3
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
B JavaFX Bei Scenen-Wechsel im primaryStage wird aktuelle Fenstergröße nicht mit übernommen AWT, Swing, JavaFX & SWT 16
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
kodela BufferStrategy wird nicht gefunden AWT, Swing, JavaFX & SWT 5
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
S ImageView wird dem Gridpane nicht zugefügt AWT, Swing, JavaFX & SWT 1
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
cool_brivk24 AWT BufferedImage wird nicht geladen AWT, Swing, JavaFX & SWT 17
S JavaFX Wird es überhaupt genutzt? AWT, Swing, JavaFX & SWT 3
FRI3ND GUI wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
J Aus welchen Grund wird der Button nicht angezeigt im GridPane? AWT, Swing, JavaFX & SWT 1
J MouseListener wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 4
E Swing Liste in Scrollpane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Controller wird zu groß, was tun ? AWT, Swing, JavaFX & SWT 5
CptK Wieso wird nur ein Teil meiner Buttons angezeigt? AWT, Swing, JavaFX & SWT 1
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Aktion ausführen wenn ein JRadiobutton deselektiert wird. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann TableView wird nicht gefüllt AWT, Swing, JavaFX & SWT 14
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
zhermann JavaFX Main App wird nicht geöffnet AWT, Swing, JavaFX & SWT 6
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
M Swing Inhalt meines JTables wird falsch dargestellt AWT, Swing, JavaFX & SWT 8
T Default Table wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
K JavaFX Stage wird nicht angezeigt AWT, Swing, JavaFX & SWT 9
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
X JavaFX AreaChart area höhe wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 2
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
S Swing Konstruktor wird nicht rechtzeitig fertig? AWT, Swing, JavaFX & SWT 4
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Linie wird nach Mausklick nicht am richtigen Ort gezeichnet AWT, Swing, JavaFX & SWT 11
C Liste - ListView wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
N JavaFX TextArea Updaten bevor Prozess gestartet wird AWT, Swing, JavaFX & SWT 7
B HBox wird nicht im Bottom angezeigt AWT, Swing, JavaFX & SWT 8
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben