哦......该死的数学!!又一次卡住了。这似乎很容易,但我认为它并不那么容易, 问题陈述:我想旋转位于固定圆上的3个固定点。 1.当选择1点时,其余2点应为静态模式,且只有选定点应在圆周上移动/旋转。 2.所有3个点通过3条线连接,如图所示。当我们选择一个点并旋转它时,连接线也会增加和减少。
我已经尝试在触摸后的每个瞬间解决这个问题寻找角度。但它根本不需要工作......
像这样
答案 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