2010-08-26 66 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

为什么要变换鼠标坐标?如果您不希望鼠标坐标系与图像一起旋转,请不要将图像旋转应用于鼠标坐标!

编辑:因此,我重新阅读您的文章的底部,并意识到你只是想改正初始轮换。

你应该做的是不正确的鼠标正在旋转,而是围绕其本地坐标旋转地图和翻译世界坐标。

这会产生以您描述的方式组合这两种转换的效果。