今天试着做一个能跟着手指转动方向的转盘,其中需要将鼠标事件的坐标值转化为Rectangle的rotation。
首先是求斜率,假设原点为(0,0),那么斜率就是y/x
circleControl.recY/circleControl.recX
已知斜率就可以求角度,但是用Math.atan求出的是弧度,需要进一步转化为角度
Math.atan(circleControl.recY/circleControl.recX)/(Math.PI/180)
刚才说到假设原点为(0,0),但是其实写过qml或图形编程的都知道,原点其实是该图形的(width/2,height/2),也就是图形的(0,0)是在图形的左上角,所以取x和y也需要点心思,正确取点是以下代码。
//mouse是鼠标坐标(手指坐标)
circleControl.recX=mouse.x-rectangle.width/2;
circleControl.recY=rectangle.height/2-mouse.y;
然后图形的rotation默认为0,但是0的时候其实等于数学坐标角度的90度,而且rotation增加时是以顺时针旋转的,跟数学角度有区别。所以需要在求出的角度上加90度使图形变为数学角度的0度,再用360度减去结果,就可以使顺时针转化为逆时针。
circleControl.rotation=450-Math.atan(circleControl.recY/circleControl.recX)/(Math.PI/180);