【问题标题】:Calculate coordinates of a point after zooming in JavaScript放大JavaScript后计算点的坐标
【发布时间】:2020-06-02 11:41:45
【问题描述】:

我需要在图像上做一些注释。此图像是可缩放的(可以放大和缩小)。现在的挑战是注释也应该随着缩放而移动。我怎样才能做到这一点?我知道缩放的“方向”取决于缩放时被视为“中心”的点,因此假设这个“中心”是 iamge 容器的绝对中心(宽度/2,高度/2),我如何获得缩放后图像上同一点的坐标?

例如,考虑以下两张图片:

Image-1(正常比例):

Image-2(放大):

如果我知道 Image-1 中红点的坐标(正常比例),如何获得 Image-2 中同一红点的坐标 (x,y)?请注意,图像容器的宽度和高度将在整个缩放过程​​中保持不变。

【问题讨论】:

  • 获取您的点与中心的 x/y 距离,将其与您的比例因子相乘,然后再次应用中心的结果值...?

标签: javascript html css image image-processing


【解决方案1】:

首先,您需要确定注释相对于图像中心的坐标。

因此,例如在 200 x 100 的图像上,当您将图像的中心作为原点时,原点位于左上角的点 (120,60) 将是 (20,-10)。

如果您将图像缩放 150%,您的新坐标将是这些坐标乘以 1.5 (=150%)。 在我们的示例中,这将是 30,-15。

你可以用原始原点计算回绝对值

【讨论】:

  • "以图像的中心为原点时,原点在左上角的点 (120,60) 将是 (20,-10)。" - 我不太明白这个说法。
  • 坐标系不匹配。我知道。在 web 中,我们通常使用左上为 0,0,下和右为正方向。图像应该使它更清晰。 m.imgur.com/gallery/K3szYCr
  • 优秀的答案 - 专注于方法而不是代码。话虽如此,您应该编辑答案以匹配坐标系,而不是链接到将来可能丢失的图像。您需要做的就是将初始原点更改为左下角,或者将点设置为 (120,40) 以匹配 -10 和 -15 值,或者让点保持原样并将值设置为 10和 15.
  • @YinCognyto 我不确定差异或初始原点(左上角与左下角)是否是 darKnight 的问题,或者是否将原点更改为中心以保持对齐缩放。我假设是后者。
【解决方案2】:

此函数应返回从图像左上角测量的新 X 和 Y。 请记住,新坐标可能超出图像的宽度/高度,因为您选择的点可能会“缩小边缘”

/**
 * width: integer, width of image in px
 * height: integer, height of image in px;
 * x: integer, horizontal distance from left
 * y: integer, vertical distance from top
 * scale: float, scale factor (1,5 = 150%)
 */
const scaleCoordinates = (width, height, x, y, scale) =>{
	const centerX = width/2;
  const centerY = height/2;
 	const relX = x - centerX;
  const relY = y - centerY;
  const scaledX = relX * scale;
  const scaledY= relY * scale;
  return {x: scaledX + centerX, y: scaledY + centerY};
  

}

console.log(scaleCoordinates(100,100,25,50, 1.2));

【讨论】:

  • 我相信scaleCoordinates 的所有参数,即widthheightxy 将始终保持不变?只有scale 会改变?
  • 如果图像大小没有改变,前两个保持不变。如果注解点不变,则第二个2不变。
  • 如果我拖动这张图片,是否可以移动注释?
  • 如果您稍微修改一下代码,您可以... 在问题中,您指定将从中心进行缩放。您现在建议的是缩放和拖动。这基本上是一个“偏心变焦”。不知道你的用户界面是什么样子的。使用中心进行缩放可能比在拖动图像时移动注释相同的量更容易。你可以
  • 你能解释一下scaleCoordinates函数中数学公式背后的逻辑吗?我不明白你为什么在最后一步中添加centerXscaledXcenterYscaledY
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多