Android 编程中的数学:关于点间旋转角度的三角法

Android 编程中的数学:关于点间旋转角度的三角法,android,math,trigonometry,angle,Android,Math,Trigonometry,Angle,我用鼠标指针找三个点的角度有问题。当鼠标围绕旋转对象移动时,旋转不会跟随鼠标 这是我的公式: double degree = Math.toDegrees( Math.atan2( (now.y - point.y) - (previous.y - point.y), (now.x - point.x) - (previous.x - point.x))); Log.w("RESULT", "DEGREE =

我用鼠标指针找三个点的角度有问题。当鼠标围绕旋转对象移动时,旋转不会跟随鼠标

这是我的公式:

double degree = Math.toDegrees( Math.atan2(
                 (now.y - point.y) - (previous.y - point.y),
                 (now.x - point.x) - (previous.x - point.x)));

         Log.w("RESULT", "DEGREE = " + degree);
        if ( degree < 0 )
          degree = 360 - (-degree);
double degree=Math.toDegrees(Math.atan2(
(现在是.y-point.y)-(以前的.y-point.y),
(现在是.x-point.x)-(以前的.x-point.x));
Log.w(“结果”,“度=”+度);
如果(度<0)
度=360-(-度);
最后2行是后来添加的

这是跟踪鼠标旋转的完整代码

Camera=Camera.getInstance()

if(event.getActionMasked()==MotionEvent.ACTION\u向下&&
event.getPointerCount()==1){
previous=新点(event.getX(),event.getY());
previous=摄影机.getMapPoint(上一个);
}
else if(event.getActionMasked()==MotionEvent.ACTION\u MOVE&&
event.getPointerCount()==1)
{  
现在点=新点(event.getX(),event.getY());
now=camera.getMapPoint(现在);
ArrayList=mObject.getSubObjects();
游戏对象部分=list.get(0);
Point=part.getPolygon().getCenter();
Log.w(“结果”、“上一个=“+Previous.x+”“+Previous.y”);
Log.w(“结果”,“下一步=”+now.x+”+now.y);
Log.w(“结果”、“中心=“+point.x+”“+now.y”);
双学位=数学到学位(数学到学位)(
(现在是.y-point.y)-(以前的.y-point.y),
(现在是.x-point.x)-(以前的.x-point.x));
Log.w(“结果”,“度=”+度);
如果(度<0)
度=360-(-度);
android.graphics.Matrix矩阵=新的android.graphics.Matrix();
后旋转矩阵((浮动)度,点x,点y);
//多边形;
//Polygon.Builder=新建Polygon.Builder();

对于(int i=0;i如果要查找向量(上一点)和(现在点)之间的角度,请使用:

(这是atan2(vectorproduct,scalarproduct)

您也可以使用

angle = atan2(now.y-point.y, now.y-point.y)-
        atan2(previous.y-point.y, previous.x-point.x);

谢谢你…你知道我在哪里可以找到这方面的信息吗。它可以工作,但看起来方向不同。它可以找到旋转(现在点)所需的角度向量与(上一点)共线。你可以更改第一个表达式的符号(向量积)反转旋转。虽然旋转起作用,但旋转时它的速度与我的手指不同。如果我的手指缓慢旋转,它会旋转并跟随我的手指,但任何稍微加快的旋转都赶不上
 Math.atan2((now.x - point.x)*(previous.y - point.y) - 
           (now.y - point.y)*(previous.x - point.x), 
           (now.x - point.x)*(now.y - point.y) - 
           (previous.x - point.x)*(previous.y - point.y))
angle = atan2(now.y-point.y, now.y-point.y)-
        atan2(previous.y-point.y, previous.x-point.x);