通用的解決方案:
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