SVG提供了围绕某一点旋转的标准方法(rotate(angle, px, py),px,py代表指定点的坐标),没有提供围绕某个点缩放的方法,不过这些都可以通过变换序列(多个变换连续进行)来实现。
假设需要围绕的点坐标为(px, py),缩放倍数为fx,旋转角度为angle,则:
实现围绕该点缩放的变换序列为:
transform="translate(-px(fx-1),-py(fx-1)) scale(fs)";
实现围绕该点旋转的变换序列为:
transform="translate(px, py) rotate(angle) translate(-px, -py)";
理解为什么这两个变换序列能达到目的的关键在于理解translate,scale,rotate这些变换是发生在坐标系上而不是发生在绘制的图形上,每发生一次变换,坐标系都发生了改变,下一个变换的基础是上一个变换发生后改变了的坐标系。
咔咔,更详细的动画演示等我学会了svg动画再说……