繁体   English   中英

放大或缩小时相对于图像的对象

[英]Object relative to the image while zooming in or out

我在VisualizationView的屏幕上绘制了一张地图。 我可以使用触摸功能在此地图上进行放大和缩小,具体取决于我在该视图内的焦点所在。

我还在地图放大和绘图之间切换。 当我在地图上绘制箭头并切换回放大时。我希望在地图上绘制的箭头相对于要缩放的地图保持在同一位置。 这意味着必须调整此箭头的x和y pos。

我有所有需要的变量,因为它与数学有关,我只是不知道如何解决。

有人可以向我解释如何解决这个数学问题。 我尝试在互联网上查看,但找不到很好的解释。 此外,平板电脑上的地图分辨率始终为576 x 576。

public void onZoom(final double focusX, final double focusY,
                final double factor) {

     //pseudocode
     Triangle.x = ..
     Triangle.y = ..
     Triangle.repaint();
     //peusocode
}

缩放代码直接从库中开始。

public void zoom(double focusX, double focusY, double factor) {
synchronized (mutex) {
  Transform focus = Transform.translation(toMetricCoordinates((int) focusX, (int) focusY));
  double zoom = RosMath.clamp(getZoom() * factor, MINIMUM_ZOOM, MAXIMUM_ZOOM) / getZoom();
  transform = transform.multiply(focus).scale(zoom).multiply(focus.invert());
}

}

我希望有人能解释解决此问题的数学原理。

我并不直接熟悉您所使用的库,但是要将箭头(三角形)的位置移至新位置,您应该对它应用与对地图相同的变换。

可以这样考虑:在缩放之前,箭头的位置(箭头的中心或箭头,但是您定义“位置”)和地图上指向的点具有相同的坐标。 缩放后,地图上的点将移至新位置,并且您希望箭头移至相同的新位置,因此您需要使用相同的变换。 就像我说的那样,我对您所使用的库不熟悉,因此我无法确切地告诉您该怎么做,但这就是您想要的地方。

但是请注意,您只想变换箭头/三角形的一个点并相对于它绘制其他点。 如果对所有3个对象进行变换,最终将导致箭头在放大和缩小时变得越来越大(我认为您不想要)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM