Ich habe eine Reihe von Java2D-Aufrufe, die Vektoren auf einen Grafikkontext zeichnen. Ich möchte, dass das Bild in der Größe verdoppelt und dann um 90 Grad gedreht wird.Rotation und Skalierung - Wie man beides macht und das richtige Ergebnis erzielt?
ich den folgenden Code bin mit, dies zu tun:
Graphics2D g2 = // ... get graphics 2d somehow ...
AffineTransform oldTransform = g2.getTransform();
AffineTransform newTransform = (AffineTransform)oldTransform.clone();
newTransform.concatenate(AffineTransform.getTranslateInstance(x1, x2));
newTransform.concatenate(AffineTransform.getScaleInstance((double)newW/(double)iconW, (double)newH/(double)iconH));
newTransform.concatenate(AffineTransform.getRotateInstance(Math.toRadians(rotationAngle), (double)iconW/2.0d, (double)iconH/2.0d));
// ... do my drawing ...
Dies dreht und Skalen, jedoch ist die Skala nicht die Art und Weise angewendet Ich mag würde. Es ist so, als ob es vor dem Skalieren gedreht wird, wodurch das Bild auf der falschen Achse breiter wird.
Gibt es einen besseren Weg, dies zu tun?
Ok, das funktioniert, aber ich verstehe es nicht. Warum ist es in Ordnung, die Übersetzung zuerst anzuwenden? Dh, wenn Übersetzen zuerst passiert, passiert es zuerst. Aber dreht sich nach der Skalierung, auch wenn die Rotation zuerst angewendet wird? Da ist etwas, das ich nicht verstehe. – jsight
Schwer zu erklären, warum die Übersetzung immer noch korrekt funktioniert, aber wenn Sie sich die zugrunde liegende Matrix-Mathematik ansehen, werden Sie sehen, warum sie sinnvoll ist. –