[英]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.