计算触摸点的角度并在Android中旋转它

数学再一次打败了我.这是一项非常简单的任务,但我无法完成任务.

场景:我在SurfaceView上绘制圆形图像.用户触摸图像边框上的一个点并开始将其拖动到周围.我需要根据用户的移动旋转圆形图像.
我有两个重要的信息,图像中心X,Y坐标和触摸点坐标.

正如你在图像中看到的那样,用户触摸了一个点,根据我的绘制,触摸点角度应该在40左右.我无法正确计算它.

我尝试使用这个公式:

angle = Math.atan2(touchedY - centerY,touchedX - centerX) * 180 / Math.PI

我无法理解我应该如何计算角度,就像现在一样,它不能正常工作并且值不好.例如,在图像的情况下,角度计算是-50.

感谢您的时间,任何信息都很乐意.

LE:其实我认为我犯了一个错误,如下所述.圈子应该是这样的:

解决方法

让我们重新解决问题:你想找到两个向量之间的角度.第一个向量是从中心点(u)向上延伸的向上矢量,第二个向量是从中心点到触摸点(v)的向量.

现在我们可以回想起(或谷歌)

cos a = uv /(| u | * | v |)

其中a是向量和| u |之间的角度是矢量的长度.向上的u是(0,1),长度为1.

手动乘以向量会取消x项,并给我们这样的东西.

double tx = touch_x - center_x,ty = touch_y - center_y;
double t_length = Math.sqrt(tx*tx + ty*ty);
double a = Math.acos(ty / t_length);

注意如何通过从触摸点减去中心点来获得v向量.如果需要,请记得转换为学位.

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...