0

我在 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());
}

}

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

4

1 回答 1

0

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

可以这样想:在缩放之前,箭头的位置(箭头的中心或头部,但是您定义“位置”)和它指向的地图上的点具有相同的坐标。缩放后,地图上的点将移动到新位置,您希望箭头移动到相同的新位置,因此您需要使用相同的变换。就像我说的,我不熟悉你正在使用的库,所以我不能确切地告诉你如何做到这一点,但这就是你想要的。

但是请注意,您只想转换箭头/三角形的一个点并相对于它绘制其他点。如果你转换所有 3 个,你最终会随着放大和缩小箭头变得越来越小(我假设你不想要)。

于 2012-11-14T20:27:22.230 回答