2010-08-26 78 views
0

我遇到了2D旋轉實現的問題。我正在嘗試爲地圖創建一個平移功能(將鼠標移動到上方;它應該將地圖向下移動)。地圖只是一個可以旋轉的二維背景圖像等。問題是當它位於旋轉狀態移動我的鼠標將繼續移動鼠標的方向,就好像它有0度的旋轉。 (IE。旋轉的90度地圖會切換移動鼠標左移鼠標。)我試着在下面實現一個修正,但在某些地圖角度向上移動時,地圖會向下移動&稍微向左移動並向上移動地圖&稍微正確。我正在尋找刪除「略有」。旋轉並應用到當前鼠標座標的鼠標差異

在OnMouseMove事件中,我得到了上一個位置和當前位置之間的差異,以確定我的鼠標在X軸上的移動量。然後,我將這些X和Y差異轉換成二維旋轉公式來計算旋轉後的X,Y差異。我採取旋轉的差異並縮放它,並將其添加到我的舊地圖點的位置以獲取新的經緯度。這對於0度座標的工作很好,就像93度一樣略微下降。

任何幫助,爲什麼它會略有關閉?謝謝!

double cosA = Math.Cos(MapAngle.DecimalRadians); 
double sinA = Math.Sin(MapAngle.DecimalRadians); 

double dx = (_oldMouseX - args.MouseX); 
double dy = (_oldMouseY - args.MouseY); 

double rdx = (cosA*dx - sinA*dy); 
double rdy = (sinA*dx + cosA*dy); 

double latitude = oldMapPoint.Latitude.DecimalDegrees + rdy * latitudePerPixelScale; 

double longitude = oldMapPoint.Longitude.DecimalDegrees + rdx * longitudePerPixelScale; 
+0

請注意,此代碼的正好兩行與鼠標有任何關係。其餘的是2d幾何。 – 2010-08-26 22:37:14

回答

0

爲什麼要變換鼠標座標?如果您不希望鼠標座標系與圖像一起旋轉,請不要將圖像旋轉應用於鼠標座標!

編輯:因此,我重新閱讀您的文章的底部,並意識到你只是想改正初始輪換。

你應該做的是不正確的鼠標正在旋轉,而是圍繞其本地座標旋轉地圖和翻譯世界座標。

這會產生以您描述的方式組合這兩種轉換的效果。