通用的解决方案:
function getOriginalPt (x, y, element) {
var matrix = element.matrix.invert(),
x1 = x * matrix.a + y * matrix.b + matrix.e,
y1 = x * matrix.c + y * matrix.d + matrix.f;
return {x: x1, y: y1};
}
// USAGE
var paper = Raphael(0, 0, 500, 400),
rect = paper.rect(10, 50, 100, 100).transform('t50,90s2,2,15,30t200,-50'),
bBox = rect.getBBox(),
originalPt = getOriginalPt(bBox.x, bBox.y, rect);
具体的解决方案:
设(X1,Y1)是保存点。
var pt = {x: x1, y: y1},
scaleOrigin = {x: 0, y: 0},
scale = {x: 2, y: 2},
translate = {x: 90, y: 45};
// EDITED
pt.x = (pt.x - scaleOrigin.x - translate.x)/scale.x + scaleOrigin.x;
pt.y = (pt.y - scaleOrigin.y - translate.y)/scale.y + scaleOrigin.y;
希望这会有所帮助。
来源
2013-05-13 13:26:22
NRC
@Alex ainsworth,用一般的解决方案改进了答案,一般适用于任何一组转换。 – NRC 2013-05-13 20:00:54
谢谢NRC很好地解释它 – 2013-05-15 13:01:43
@AlexAinsworth,乐于帮助。但是,由于您是StackOverflow的新手(从您的配置文件中可以看出),我想让您知道(如果尚未)提高您最喜欢的答案或满足您的需求的概念。它可以帮助我们获得更多有意义的点数,他们有兴趣回答。帮助我们建设更强大的社区。希望你不介意。 :) – NRC 2013-05-16 12:49:36