计算触摸点的角度并在Android中的固定图像或画布或位图图像上旋转它

时间:2014-02-14 10:17:10

标签: android math canvas rotation angle

哦......该死的数学!!又一次卡住了。这似乎很容易,但我认为它并不那么容易, 问题陈述:我想旋转位于固定圆上的3个固定点。 1.当选择1点时,其余2点应为静态模式,且只有选定点应在圆周上移动/旋转。 2.所有3个点通过3条线连接,如图所示。当我们选择一个点并旋转它时,连接线也会增加和减少。

我已经尝试在触摸后的每个瞬间解决这个问题寻找角度。但它根本不需要工作......

像这样enter image description here

enter image description here enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

我希望以下说明可以让您将步骤放入编码语言中。

假设要移动的顶点已经选中,因此下面定义的(xcnd,ycnd)计算用于设置三角形的选定顶点。

让约束圆以(cx,cy)和半径r为中心。

让屏幕被触摸的位置坐标为(xtch,ytch)

让屏幕相对于中心的位置坐标为(xrel,yrel)

然后xrel = xtch - cx和yrel = ytch - cy

在(xtch,ytch)触摸屏幕时,让约束圆上的点的坐标为(xcnd,ycnd)。

xcndrel = xcnd - cx和ycndrel = ycnd - cy给出约束圆相对于其中心的坐标,

请注意

xrel和xcndrel将具有相同的符号(即正面或均为负面)

和yrel和ycndrel也会有相同的迹象。

函数abs(x)= x如果x> = 0和-x如果x< 0应该以您正在使用的语言提供

函数符号(x)可能有也可能没有,如果x> 0,则sign(x)= 1,如果x <0,则为-1,对于x = 0,则为undefined

如果不可用,则签名(x)= x / abs(x)

检查xrel = 0

如果xrel = 0 xcndrel = 0,ycndrel = r * sign(yrel)

否则在第一象限工作,即使用abs(xrel)和abs(yrel)x> 0和y> 0

使用

找到相对于圆心的触摸屏幕的角度

THETA =反正切(ABS(yrel)/ ABS(xrel))

使用第一象限中的theta找到坐标(xcndrel,ycndrel),然后使用xrel和yrel的符号放置在正确的象限中

xcndrel = sign(xrel)* r * COS(theta)

ycndrel = sign(yrel)* r * SIN(theta)

现在可以找到屏幕坐标

xcnd = xcndrel + cx

ycnd = ycndrel + cy