Javascript KineticJS在调整另一个图像的大小时重新计算图像的位置

Javascript KineticJS在调整另一个图像的大小时重新计算图像的位置,javascript,math,resize,kineticjs,Javascript,Math,Resize,Kineticjs,好吧,这更像是一个数学问题,但它使用的是我开发的KineticJs代码。目前我有一个舞台和舞台,所有这些都布置得很好。一旦一个特定的组被调整大小,让我们称之为背景,我正在使用一个函数来更新另一个组的位置,我们可以使用 .move ({x: (calculation), y: (calculation)}) 方法。 我希望前景重新定位自身,使其在调整大小后,在背景中的位置保持不变。ie:它与背景一起移动,如果背景上有一个小圆圈,我将前景放在这个圆圈中,在调整大小后,前景应该仍然在圆圈中 我的变量

好吧,这更像是一个数学问题,但它使用的是我开发的KineticJs代码。目前我有一个舞台和舞台,所有这些都布置得很好。一旦一个特定的组被调整大小,让我们称之为背景,我正在使用一个函数来更新另一个组的位置,我们可以使用

.move ({x: (calculation), y: (calculation)})
方法。 我希望前景重新定位自身,使其在调整大小后,在背景中的位置保持不变。ie:它与背景一起移动,如果背景上有一个小圆圈,我将前景放在这个圆圈中,在调整大小后,前景应该仍然在圆圈中

我的变量如下:数字不应该仅仅代表什么:

bgX = the background width before resize.
bgXfinal = the background width after resize.
bgY = the background height before resize.
bgYfinal = the background height after resize.
fgX = foreground position x  (from topleft point) within the bg.
fgY = foreground position y (from topleft point) within the bg.
通过此数学计算和其他计算,背景按比例调整大小,但这是主要部分:

bgYfinal = bottomLeft.getY() - topLeft.getY();
bgXfinal = image.getWidth() * bgYfinal / image.getHeight();
我需要的是我的移动的x和y位置的坐标计算;方法,我无法理解,无论出于什么原因,我都无法理解。无论图像变大还是变小,计算都应该起作用,因为图像缩小的结果将产生负的x/y调整,而图像放大的结果将产生正的x/y调整

目前我有:

// bg size is increasing
if ( bgX < bgXfinal ) {
    group.move( {  x: (bgXfinal - bgX), y: (bgYfinal - bgY) } );
}
// bg size is decreasing
if ( bgX > bgXfinal ) {
    group.move( {  x: (bgXfinal - bgX), y: (bgYfinal - bgY) } );
}

显然,这是不正确的,因为获取差异并将其添加到位置会使前景按预期移动,但移动太大。如果我除以2,将前景正好放在中心,它就会工作。但是我需要它来处理背景上的任何位置,如果你的数学悟性好的话,我会欣赏一个合适的计算来确定背景增加/减少时前景的位置。好的,经过一些研究,我发现KineticJs中有一种方法支持这种特性。设定位置;方法可以根据包含图像的大小调整提供的计算重置内部图像的位置。以下是数学:

var x = innerGroup.getPosition().x,
    y = innerGroup.getPosition().y,
    newX = x / oldX * newWidth,
    newY = y / oldY * newHeight;

    innerGroup.setPosition( { x: newX, y: newY } );

    innerLayer.draw();
将其放入重新调整大小时重新计算容器尺寸的代码部分,内部组的位置将与外部组新调整大小的尺寸成比例地改变