2012-11-14 43 views
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()); 
} 

}

我希望有人能解釋背後解決這個數學。

回答

0

我並不直接熟悉您使用的庫,但是要將箭頭(三角形)的位置移動到新的位置,您應該對地圖應用相同的轉換。

想想這樣:在縮放之前,箭頭的位置(箭頭的中心或箭頭,但是您定義了「位置」)和它指向的地圖上的點具有相同的座標。縮放後,地圖上的點將移動到新的位置,並且您希望箭頭移動到同一個新位置,因此您需要使用相同的變換。就像我說的,我對你使用的庫不熟悉,所以我不能告訴你如何做到這一點,但這正是你想成爲的地方。

但是,請注意,您只想將一個轉換爲箭頭/三角形的點,並繪製其他點相對於它的點。如果你將所有3個變換,你最終會隨着放大和縮小(我假定你不需要)箭頭變得越來越大。

相關問題