我的2D旋转实现遇到了问题。我正在尝试为地图创建一个平移功能(向上移动鼠标;它应该向下移动地图。)地图只是一个能够旋转的2d背景图像等。问题是当它在一个地方时旋转状态向上移动鼠标将继续沿着方向移动鼠标,就像它有0度旋转一样。 (IE。旋转的90度地图将切换鼠标向左移动鼠标。)我尝试在下面实施修复,但在某些地图角度向上移动会使地图向下移动。略微向左移动将向上移动地图稍微好吧。我希望删除“略微”。
在OnMouseMove事件中,我得到了先前位置和当前位置之间的差异,以确定我的鼠标在X& Y轴。然后,我将这些X和Y差异折腾成2D旋转公式,以计算旋转的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 :(得分:0)
为什么要改变鼠标坐标?如果您不希望鼠标坐标系随图像一起旋转,请不要将图像旋转应用于鼠标坐标!
编辑:所以我重新阅读帖子的底部部分并意识到您只是想要纠正初始轮换。
对于旋转的鼠标,您应该做的是不正确,而是围绕其本地坐标旋转地图并以世界坐标进行平移。
这将具有以您描述的方式组合两种变换的效果。