1+ package test ;
2+
3+ import java .awt .Shape ;
4+ import java .awt .geom .AffineTransform ;
5+ import java .awt .geom .Rectangle2D ;
6+
7+ public class Test_Affine extends Test_ {
8+
9+ static void testTransform () {
10+ double px = 87 ;
11+ double py = 33 ;
12+ double ar = 0.3 ;
13+ double theta = Math .PI / 3.2 ;
14+ Shape temp = new Rectangle2D .Double (1 , 2 , 3 , 4 );
15+
16+ // original:
17+
18+ temp = AffineTransform .getTranslateInstance (-px , -py ).createTransformedShape (temp );
19+ temp = AffineTransform .getScaleInstance (1 , 1 / ar ).createTransformedShape (temp );
20+ temp = AffineTransform .getRotateInstance (-theta ).createTransformedShape (temp );
21+ temp = AffineTransform .getScaleInstance (1 , ar ).createTransformedShape (temp );
22+ temp = AffineTransform .getTranslateInstance (px , py ).createTransformedShape (temp );
23+ System .out .println (((java .awt .geom .Path2D .Double ) temp ).getBounds2D ());
24+
25+ //java.awt.geom.Rectangle2D$Double[x=-46.69756664428215,y=36.4809161227257,w=12.752972196426072,h=2.970603583150705]
26+
27+ System .out .println ("---" );
28+
29+ // using preConcatenate:
30+
31+ temp = new Rectangle2D .Double (1 , 2 , 3 , 4 );
32+ AffineTransform tr ;
33+ tr = AffineTransform .getTranslateInstance (-px , -py );
34+ tr .preConcatenate (AffineTransform .getScaleInstance (1 , 1 / ar ));
35+ tr .preConcatenate (AffineTransform .getRotateInstance (-theta ));
36+ tr .preConcatenate (AffineTransform .getScaleInstance (1 , ar ));
37+ tr .preConcatenate (AffineTransform .getTranslateInstance (px , py ));
38+ temp = tr .createTransformedShape (temp );
39+ System .out .println (((java .awt .geom .Path2D .Double ) temp ).getBounds2D ());
40+
41+ // java.awt.geom.Rectangle2D$Double[x=-46.697566644282126,y=36.48091612272571,w=12.752972196426079,h=2.970603583150698]
42+
43+ // Applying transforms in reverse order; only one new object
44+
45+ temp = new Rectangle2D .Double (1 , 2 , 3 , 4 );
46+ tr .setToTranslation (px , py );
47+ tr .scale (1 , ar );
48+ tr .rotate (-theta );
49+ tr .scale (1 , 1 / ar );
50+ tr .translate (-px , -py );
51+ temp = tr .createTransformedShape (temp );
52+ System .out .println (((java .awt .geom .Path2D .Double ) temp ).getBounds2D ());
53+
54+ // java.awt.geom.Rectangle2D$Double[x=-46.697566644282126,y=36.4809161227257,w=12.752972196426079,h=2.970603583150698]
55+
56+ // test for DrawableGroup
57+
58+ AffineTransform at ;
59+ at = new AffineTransform (tr );
60+ at .concatenate (AffineTransform .getRotateInstance (-theta , px , py ));
61+ double xt = Math .sin (theta )*10 ;
62+ double yt = Math .cos (theta )*10 ;
63+ at .concatenate (AffineTransform .getTranslateInstance (xt , yt ));
64+ System .out .println (at );
65+
66+ at .setTransform (tr );
67+ at .rotate (-theta , px , py );
68+ at .translate (xt , yt );
69+
70+ System .out .println (at );
71+
72+ System .out .println ("///" );
73+ }
74+
75+
76+
77+
78+ public static void main (String [] args ) {
79+
80+ testTransform ();
81+ System .out .println ("Test_Affine OK" );
82+ }
83+
84+ }
0 commit comments