Kann man den Code umschreiben?

uuqfowehui23

Aktives Mitglied
Also, die Sache ist, gelernt haben wir diese Codes:
  1. translate(double x, doubley),
  2. scale(double x, double y),
  3. rotate(double theta),
  4. shear(double x, double y),
  5. transform(AffineTransform at) and
  6. setTransform(AffineTransform).
Unser Prof meinte damit können wir alle Affinentransformationen machen, jetzt haben wir einen Übungsleiter, der sich nicht mit den Vorlesungsfolien beschäftigt hat und uns solchen Code zum lösen verwendet:

Java:
   AffineTransform at = AffineTransform.getTranslateInstance(this.pos.getX(), this.pos.getY());
    at.concatenate(AffineTransform.getScaleInstance(this.scaleX, this.scaleY));

    Shape shape = at.createTransformedShape(this.form);
    Point2D center = getCenter(shape);

    at = AffineTransform.getRotateInstance(this.winkel, center.getX(), center.getY());
    return at.createTransformedShape(shape);

Ich würde den auch nachvollziehen und anwenden, ich glaube jedoch ich darf nur die Codes von 1-6 verwenden, weil das der Prof meinte, aber ich muss genau so die Aufgabe lösen, wie der Übungsleiter. Meine Frage nun, kann ich irgendwie statt
at= AffineTransform.getRoatete das umschreiben, damit ich mit at.rotate auf das gleiche Ergebnis komme?

Kann ich irgendwie deieses at=AffineTransform.getTransalte... irgendwie umschreiben, damit ich das gleiche wie dieser Code mit at.translate hinbekomme?
 
Es wurde dir glaube ich schon früher bereits gesagt, dass du einfach mal in die Dokumentation gucken sollst:
This operation is equivalent to the following sequence of calls:
AffineTransform Tx = new AffineTransform();
Tx.translate(anchorx, anchory); // S3: final translation
Tx.rotate(theta); // S2: rotate around anchor
Tx.translate(-anchorx, -anchory); // S1: translate anchor to origin
 
Es wurde dir glaube ich schon früher bereits gesagt, dass du einfach mal in die Dokumentation gucken sollst:
Aber wie soll man sich sowas im Kopf erdenken 😵? Und manchmal ist es ja so, das steht rotiere und ich muss nur rotate nutzen, woher weiß ich wann ich rotate und wann ich z. B. rotateinstance brauche? Bei unseren Aufgaben steht rotiere, manchmal nutzt der Übungsleiter rotate und manchmal getRotateInstance z. B., wie kann ich differenzieren, wann ich was brauche?
 
Aber wie soll man sich sowas im Kopf erdenken 😵? Und manchmal ist es ja so, das steht rotiere und ich muss nur rotate nutzen, woher weiß ich wann ich rotate und wann ich z. B. rotateinstance brauche? Bei unseren Aufgaben steht rotiere, manchmal nutzt der Übungsleiter rotate und manchmal getRotateInstance z. B., wie kann ich differenzieren, wann ich was brauche?
Gar nicht, deswegen gibt's ja die Dokumentation. Da steht beschrieben, was von beidem was macht.
 
Java:
AffineTransform at1 = AffineTransform.getTranslateInstance(70, -10);
Shape s1= at1.createTransformedShape(this.forms);

dies sollte das gleiche sein wie das

Java:
AffineTransform at2 = new AffineTransform();
at2.translate(70, -10);
Shape s2= at2.createTransformedShape(this.forms);

Das Objekt brauchst du beim ersten nicht da du ja direkt eine static Methode aus der Klasse aufrufst . Die dir auch ein AffineTransform Objekt zurück gibt.


Wenn du nur eine Veränderung am Shape machen willst hast du beim ersten weniger Tipperei.


Für mehrere gleichzeitige Veränderungen ist der Aufwand eigentlich gleich.
Sieht du ja in deinen Beispiel Verschieben und Scale

Java:
 AffineTransform at = AffineTransform.getTranslateInstance(this.pos.getX(), this.pos.getY());
 at.concatenate(AffineTransform.getScaleInstance(this.scaleX, this.scaleY));
 Shape shape = at.createTransformedShape(this.form);

Java:
 AffineTransform at = new AffineTransform();
 at.translate(this.pos.getX(), this.pos.getY());
 at.scale(this.scaleX, this.scaleY));
 Shape shape = at.createTransformedShape(this.form);
 
Zuletzt bearbeitet:

Zurück
Oben