哦.. 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

07-26 04:44