我在 VisualizationView 内的屏幕上绘制了一张地图。我可以放大和缩小这张地图,具体取决于我使用触摸功能在该视图中的焦点位置。
我还在放大和在此地图上绘图之间切换。当我在地图上绘制箭头并切换回放大时。我希望我在地图上绘制的箭头相对于我正在放大和缩小的地图保持在同一位置。这意味着必须调整此箭头的 x 和 y 位置。
我有所有需要的变量我只是不知道如何解决这个问题,因为它与数学有关。
有人可以向我解释如何明智地解决这个数学问题。我尝试在互联网上查找,但找不到很好的解释。此外,平板电脑上的地图分辨率始终为 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());
}
}
我希望有人能解释解决这个问题的数学原理。