There are several different things that you need to understand in order to understand what is happening here.
-, , . , :
var r1 = s.rect(0,0,100,100,20,20)
.attr({ fill: "red", opacity: "0.8", stroke: "black", strokeWidth: "2" });
r1.transform('t0,0');
r1.animate({ transform: 't0,0r90,50,50' }, 5000);
http://jsfiddle.net/96D8t/3/
, :
var r1 = s.rect(0,0,100,100,20,20)
.attr({ fill: "red", opacity: "0.8", stroke: "black", strokeWidth: "2" });
r1.transform('r0,50,50'); // no shrinking this time...
r1.animate({ transform: 'r90,50,50' }, 2000);
http://jsfiddle.net/96D8t/4/
, 0,0 0 ? , , .
Snap/Raphael , ( ) .
2D-
a c e
b d f
( )
x y, x, y , 1:
newX = a*oldX + c*oldY + e;
newY = b*oldX + d*oldY + f;
do-nothing, t0,0,
1 0 0
0 1 0
,
{a:1, c:0, e:0,
b:0, d:1, f:0}
, , newX 1 X, newY 1 .
r90,50,50:
0 -1 100
1 0 0
I.e., (50 100),
newX = 0*50 -1*100 + 100*1 = 0
newY = 1*50 + 0*100 + 0 = 50
(50 100) 90 (50,50), (0,50), .
,
1 0 0
0 1 0
0 -1 100
1 0 0
,
0.5 -0.5 50
0.5 0.5 0
45 (50,50).
, , , , .
, , , , .