C# 鼠标差旋转并应用于当前鼠标坐标

C# 鼠标差旋转并应用于当前鼠标坐标,c#,2d,rotation,C#,2d,Rotation,我的2D旋转实现有问题。我正在尝试为地图创建平移功能,将鼠标向上移动;它应该把地图向下移动。地图只是一个可以旋转的2d背景图像,等等。问题是当它处于旋转状态时,向上移动鼠标将继续沿方向移动鼠标,就像它有0度旋转一样。例如,旋转90度的地图将切换向上移动鼠标和向左移动鼠标。我尝试在下面实现一个修复,但在某些贴图角度上,向上移动会使贴图向下移动&稍微向左移动,向上移动会使贴图向上移动&稍微向右移动。我想把它去掉 在OnMouseMove事件中,我将获得上一个位置和当前位置之间的差异,以确定鼠标在X&

我的2D旋转实现有问题。我正在尝试为地图创建平移功能,将鼠标向上移动;它应该把地图向下移动。地图只是一个可以旋转的2d背景图像,等等。问题是当它处于旋转状态时,向上移动鼠标将继续沿方向移动鼠标,就像它有0度旋转一样。例如,旋转90度的地图将切换向上移动鼠标和向左移动鼠标。我尝试在下面实现一个修复,但在某些贴图角度上,向上移动会使贴图向下移动&稍微向左移动,向上移动会使贴图向上移动&稍微向右移动。我想把它去掉

在OnMouseMove事件中,我将获得上一个位置和当前位置之间的差异,以确定鼠标在X&Y轴上移动的程度。然后,我把这些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;

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

编辑:所以我重新阅读了你文章的底部部分,意识到你只是想纠正最初的旋转

对于正在旋转的鼠标,您应该做的不是正确的,而是围绕其局部坐标旋转贴图,并在世界坐标中平移


这将产生按照您描述的方式组合两个转换的效果。

请注意,此代码中有两行与鼠标有关。其余的是二维几何体。