【问题标题】:Calculate angle of touched point and rotate it on a fixed image or canvas or bitmap image in Android计算触摸点的角度并在Android中的固定图像或画布或位图图像上旋转
【发布时间】:2014-03-13 15:33:38
【问题描述】:

哦..该死的数学!再次卡住。看起来很简单,但我觉得没那么容易, 问题陈述:我想旋转位于固定圆上的 3 个固定点。 1.选择1点剩余2个点应该是静态模式,只有选择的点应在圆圈的圆周上移动/旋转。 2.如图所示,所有3个点都通过3条线连接..当我们选择一个点并旋转它时,连接的线也会增加和减少..

我已经尝试在触摸后的每一刻寻找角度来解决这个问题。但它并不能完全按照我的需要工作..

类似

【问题讨论】:

  • 三角形边上的“白”点是如何确定的?
  • 这些点显示线的交点...我也想修复这些点,但在初始阶段..它们现在不重要..
  • 你还没有定义所有的线条是什么,所以只是说白点是线条的交点并没有帮助。 BC 上的点仅显示为 A 线的交点,但未显示这些线的约束。例如,当 A 移动时,AB 和 AC 上的点也会移动。希望如果我在下面的回答是可以接受的,那么您将能够使用您对这些的定义来计算其他线和点。

标签: android math canvas rotation angle


【解决方案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 if x>=0 和 -x if x

函数sign(x)可能可用也可能不可用,如果x>0,sign(x) =1,如果x

如果不可用则 sign(x)=x/abs(x)

检查 xrel=0

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

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

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

theta=arctan(abs(yrel)/abs(xrel))

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

xcndrel = 符号(xrel)*r*COS(theta)

ycndrel = 符号(yrel)*r*SIN(theta)

现在可以找到屏幕坐标

xcnd = xcndrel +cx

ycnd = ycndrel + cy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多