2016-08-21 11 views
-1

私は数学では最善ではないので、を理解してください。どのようにして与えられた変数から縮尺と傾きの値を計算できますか?距離または点からの縮尺と傾きを計算する

  • ズーム:ユーザーは、画面上に2本の指を置き、/離れてそれらを一緒に移動します。検出器は、指の間の初期および現在の距離をピクセル単位で報告する。カメラのズームを実装するのに便利です。
  • ピンチ:ズームと同様です。検出器は距離の代わりに初期および現在の指の位置を報告します。カメラのズームや回転などのより洗練されたジェスチャーを実装するのに便利です。私は中央にズームてるよう

私の目標は、地図上のピンチとズームイン/ズームアウトすることができることですに/地図の中心からではなく、カメラがチルトアップし、副なければなりませんその逆。

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

EDIT:

01:傾斜の例にズーミングしながらenter image description here

答えて

1

ズームを見つけるには、ズーミングの前後で指間のユークリッド距離の比を使用する必要があります。

dy = initialpointer2.y - initialpointer1.y 
dx = initialpointer2.x - initialpointer1.x 
new_dy = pointer2.y - pointer1.y 
new_dx = pointer2.x - pointer1.x 

float Scale = Sqrt((new_dy * new_dy + new_dx * new_dx)/(dy * dy + dx * dx)) 

あなたの数学ライブラリがHypot機能が含まれている場合、これは本当に素晴らしいですし、

Dir = Marh.atan2(dy, dx) 
New_Dir = Marh.atan2(new_dy, new_dx) 
RotAngleRadians = New_Dir - Dir 
+0

前と後の指指の方向との角度差を算出し、回転を得るためにそれを

float Scale = Math.Hypot(new_dy, new_dx)/Math.Hypot(dy, dx) 

を使用有益!ズームインに基づいてチルトベースの値を計算する方法について考えていますか?フォーカスポイントを維持しながらズームしながらカメラを少し傾けるようにしたい – Verhelst

+0

中心点が同じままでカメラを傾ける方法がわからない – MBo

+0

私の質問が間違っていました。私はあなたのズームマップに私の地図を傾けたいと思います。私は与えられた値に基づいて地図を傾ける関数tiltMap(浮動移動)を持っています。どのくらいズームしたかに基づいてこの値をどのように計算できるのだろうかと疑問に思っていた – Verhelst