QML中将坐标转化为图形角度(rotation)

今天试着做一个能跟着手指转动方向的转盘,其中需要将鼠标事件的坐标值转化为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);
发布了6 篇原创文章 · 获赞 0 · 访问量 231

猜你喜欢

转载自blog.csdn.net/qq_35342292/article/details/104626058