哦.. damm数学!再次卡住。这似乎很容易,但我认为这并不容易,
问题陈述:我想旋转固定圆上的3个固定点。
1.当选择一个点时,其余两个点应为静态模式,并且仅所选点应在圆的圆周上移动/旋转。
2.如图所示,所有3个点都通过3条线连接。当我们选择一个点并将其旋转时,连接的线也会增加和减少。
我已经尝试解决此问题,并在每次触摸后立即找到角度。但是按照我的需求,它并不是很有效。
像这样的东西
最佳答案
希望以下说明使您能够将步骤融入您的编码语言中。
假定已经选择了要移动的顶点,因此使用下面定义的(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也将具有相同的符号。
如果x> = 0,则函数abs(x)= x;如果x
函数sign(x)可能可用或可能不可用,如果x> 0则sign(x)= 1,如果x
如果不可用,则符号(x)= x / abs(x)
检查xrel = 0
如果xrel = 0 xcndrel = 0,ycndrel = r * sign(yrel)
否则在第一象限中工作,即使用abs(xrel)和abs(yrel)在其中x> 0和y> 0
找到屏幕相对于圆心触摸的角度
theta = arctan(abs(yrel)/ abs(xrel))
通过在第一个象限中使用theta找到坐标(xcndrel,ycndrel),然后使用xrel和yrel的符号将其放置在正确的象限中
xcndrel =符号(xrel)* r * COS(theta)
ycndrel =符号(yrel)* r * SIN(θ)
屏幕坐标现在可以找到
xcnd = xcndrel + cx
ycnd = ycndrel + cy