计算尺度&从距离或点倾斜

时间:2016-08-21 19:49:46

标签: java math

由于我不是最好的数学,我想理解如何计算给定变量的比例和倾斜值。

  
      
  • 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;

编辑:放大时倾斜的示例:

enter image description here enter image description here

1 个答案:

答案 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