我正在尝试缩放然后旋转一个三角形,然后将其转换为 Snap SVG 中的给定点。
我想围绕它的顶部而不是中心旋转三角形,所以我可以构建像馅饼一样的东西。
所以我想我先缩放,然后旋转,然后再平移。
var t = new Snap.Matrix();
t.scale(0.5);
t.rotate(45, bbox.cx, (bbox.cy-(bbox.h/2)));
但不知何故,规模和旋转总是有点偏离。
我重用了一个我找到并更新的 jsfiddle,所以你可以看到我的尝试:http:
//jsfiddle.net/AGq9X/477/
不知何故 bbox.cx 和 bbox.cy 不在三角形的中心。
在我的本地设置中,它们是。
奇怪的是,没有缩放的旋转工作正常,但是缩放然后旋转似乎总是在 y 轴上有点偏离,三角形不会停留在旋转点。
有什么想法可以解决吗?
编辑:
好的,我找到了解决方案,感谢 lan,你是对的,缩放中心很重要,
我认为它正在使用对象的中心,但它是左上角。我对其进行了调整
,现在效果更好:
var bbox = obj.getBBox(); //get coords etc. of triangle object
var t = new Snap.Matrix();
var offset = (bbox.cy+(bbox.h)) - centerY; //translate Y to center,
//depends on scaleing factor (0.5 = bbox.h, 0.25 = bbox.h*2)
t.scale(0.5, 0.5, bbox.cx, (bbox.cy+(bbox.h/2))); //scale object
t.translate(0,-offset); //translate to center
t.rotate(45, bbox.cx, (bbox.cy+(bbox.h/2))); //rotate object
obj.transform(t); //apply transformation to object
EDIT2:
我想知道如何保存转换,因此您不需要每次使用新转换时都应用它们。Ian 建议element.transform()
像这样使用来获得旧的转换:
element.transform( element.transform() + 's2,2' )