簡體   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