从距离或点计算比例和倾斜度

问题描述 投票:-1回答:1

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

  • zoom:用户将两根手指放在屏幕上并将它们一起/分开移动。检测器将以像素为单位报告手指之间的初始和当前距离。用于实现相机缩放。
  • 捏:类似于缩放。检测器将报告初始和当前手指位置而不是距离。用于实现相机缩放和更复杂的手势(如旋转)。

我的目标是能够捏住地图并放大/缩小地图中心,但是当我放大到中心时,相机应该向上倾斜,反之亦然。

@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 hereenter image description here

java math
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.