Java 触摸屏设备挤压背后的数学

Java 触摸屏设备挤压背后的数学,java,android,ios,zooming,Java,Android,Ios,Zooming,我在任何地方都找不到教程或帮助,因为我不确定如何使用它,但基本上我在Galaxy S4上为游戏实现了自己的收缩功能。游戏发现两个手指之间的距离变化,并缩放2d图片。然而,我很难理解它背后的数学原理,因为我无法缩放图片,但却无法保持图片被挤压的位置不变 到目前为止,正常情况下,比例因子从1.0f开始工作,但我不知道相机的位置移动了多少 Finger fingerA = engine.getHand().getFinger( 0 ); Finger fingerB = engine.getHand(

我在任何地方都找不到教程或帮助,因为我不确定如何使用它,但基本上我在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;

所以,假设我理解你的问题,我想你应该把你的缩放变换集中在这一点上。

是的,这是很明显的。这不是答案。我想你刚才重申了我的问题。@Sgtale,好吧,我想我不明白你的问题。您是否正在编写自己的代码来销毁图像?或者你正在调用一些Android API?我不知道安卓。如果它是其他人的API,那么可能有一些方法可以创建、连接和应用仿射变换。您可能希望连接变换,将关注点移动到(0,0),缩放图像,然后将(0,0)移回关注点。但就像我说的,你是如何用Android做到的。。。我不知道。不,这只是一个普通的自制图书馆。以上所有代码都是理论性的。你有一个对象,它的位置和xscale和yscale的比率。@sgtHale,我不知道是否有人再使用java.awt.geom.AffineTransform,或者,它是否在Android设备上可用,但听起来你想使用类似的东西。