![]() |
1
4
据我所知,您应该查找初始角度(单击时,锚点和单击之间的线)和当前角度(拖动时,相同的线)。这个角度(独立于当前到锚定点的距离)将为您提供旋转。 所以你必须:
如何找到它: 在这两种情况下(初始单击和鼠标移动事件),您必须找到锚点和鼠标点之间的角度,并将锚点视为原点。 我将使用一个方法(getangle(x1,y1,x2,y2)。该方法(除了同一个X或同一个Y的比赛条件,很容易检测)应计算arctan(dy/dx)。 符号 但是当你划分dy/dx时,可以是:
是的,四种可能性给你两种结果。所以,你必须寻找一些条件来检测它们。 我应该查看arctan文档或源代码,看看它给出了什么值(在0和pi之间,或者-pi/2和+pi/2之间),然后检查dx或dy的符号(取决于arctan返回的范围),并使用它将pi添加/减少到结果角度。 然后你会得到一个getAngle方法,可以正确返回360度空间。 编辑 Javadoc说: math.atan重新运行角度的弧切线,范围为-pi/2到pi/2。 所以,假设你的值0是x轴的角度,如我假设的,它返回的范围是右半球。所以你必须区分左半球和右半球。 如果你计算dx=xtarget-xorigin(就像你在除法中所做的那样),如果正确的半球是正确的,它将是正的;如果不正确,它将是负的。 因此,如果dy<0,则必须将pi添加到生成的角度中。它将介于-pi/2和3pi/2之间。还可以通过将all传递到(-pi,pi)范围或(0,2pi)范围来更正结果。 编辑:伪码,请仔细核对!
|