数学再一次打败了我.这是一项非常简单的任务,但我无法完成任务.
场景:我在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向量.如果需要,请记得转换为学位.