在触摸屏设备上捏手指背后的数学原理



我找不到任何教程或帮助,因为我不知道该怎么说,但基本上我是在我的Galaxy S4上为游戏执行自己的缩放功能。游戏找到两个手指之间距离的变化,并缩放2d图像。然而,我很难理解它背后的数学,因为缩放图片,但保持相同的位置,它是捏

到目前为止,比例因子从1.0f开始正常工作,但我不知道相机的位置移动多少。

Finger fingerA = engine.getHand().getFinger( 0 );
Finger fingerB = engine.getHand().getFinger( 1 );
float dx1 = fingerA.getX()-fingerB.getX();
float dy1 = fingerA.getY()-fingerB.getY();
float currentFingerDistance = (float)Math.sqrt( dx1*dx1+dy1*dy1 );
//Get a ratio change for zoom
float change = currentFingerDistance/lastFingerDistance;
zoom *= change;
//What do I do for the position?
//camX += 
//camY +=

手指的屏幕坐标是已知的,屏幕的尺寸也是已知的。

如果有帮助的话,两个手指之间的中点很容易计算:

midX = (fingerA.getX() + fingerB.getX()) / 2;
midY = (fingerA.getY() + fingerB.getY()) / 2;

那么,假设我理解了你的问题,我认为你想把你的缩放变换集中在那个点上

捏有缩放、旋转和翻译的信息,但您只需要翻译的信息。因此,使用当前和最后一个中点的dx和dy,并增加相机位置。

最新更新