由于我不是最好的数学,我想理解如何计算给定变量的比例和倾斜值。
- zoom:用户将两根手指放在屏幕上并将它们一起/分开移动。检测器将以像素为单位报告手指之间的初始和当前距离。用于实现相机缩放。
- 捏:类似于缩放。检测器将报告初始和当前手指位置而不是距离。用于实现相机缩放和更复杂的手势,如旋转。
我的目标是能够捏住地图并放大/缩小地图中心,但是当我放大到中心时,相机应该向上倾斜,反之亦然。 / p>
@Override
public boolean zoom (float originalDistance, float currentDistance){
return false;
}
@Override
public boolean pinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer){
return false;
}
以下方法让我可以缩放和倾斜地图:
public boolean scaleMap(float scale, float pivotX, float pivotY) {}
public boolean setTilt(float tilt) {}
我想相应地缩放和更新我的地图,但这似乎不起作用:
float yScale = (pointer2.y-initialPointer2.y)/pointer2.y;
changed = mViewport.scaleMap(yScale, 0, 0);
if (changed) {
mMap.updateMap(true);
}
return changed;
编辑:放大时倾斜的示例:
答案 0 :(得分:1)
要查找缩放,您必须使用缩放前后手指之间的欧氏距离比率:
dy = initialpointer2.y - initialpointer1.y
dx = initialpointer2.x - initialpointer1.x
new_dy = pointer2.y - pointer1.y
new_dx = pointer2.x - pointer1.x
Scale = Math.sqrt((new_dy * new_dy + new_dx * new_dx) / (dy * dy + dx * dx))
如果您的数学库包含Hypot
函数,请使用它:
Scale = Math.hypot(new_dy, new_dx) / Math.hypot(dy, dx)
要获得旋转,请计算之前和之后手指指向之间的角度差:
Dir = Math.atan2(dy, dx)
New_Dir = Math.atan2(new_dy, new_dx)
RotAngleRadians = New_Dir - Dir