在使用QT的时候遇到绘制类似仪表盘的问题,要定位仪表盘上刻度的坐标然后进行刻度线的绘制,需要把仪表盘角度等分,然后通过角度正余弦函数sin,cos函数获得刻度线的坐标。
math.h中的sin和cos等函数的入参原型如下:
double sin(double _X);
double cos(double _X);
解释一下:
这两个函数的入参类型都是double, 而入参_X是角度的弧度值,返回的是弧度值对应的角度的正余弦的值;
那么,什么是弧度值呢?
(初中知识,在这里温习下):
某个角度的弧度值,其实就是 角度值*(π/180°),我们用通俗易懂的方式来解释一下:
π/180° 其实就是单位角度的弧度值,也就是角度为1°时对应的弧度值,那么我们知道了1°对应的弧度值,要求得出给定角度的弧度值就很好计算了。
计算给定角度对应的弧度值
比如我把一个圆360°分为10份,那么每份就是36°,从而得到36°对应的弧度值就是:
36° * (π/180°)
可以写成 π * (36°/180°)= π * (1/5)
因为分子分母都是度数单位,约得36°的占据180°的分数就是 1/5 ,然后和π相乘,得从而得到36°对应的弧度就是:π/5;
从而如果计算36°对应的正弦值就是:
sin(π/5)
因为π在math.h中的定义是M_PI,如下:
所以36°的正弦值的函数调用写成:
sin(M_PI/5)
余弦也同理,36°对应的余弦就是cos(M_PI/5)
通过正余弦值得到刻度坐标
我们得到了角度对应的正余弦值之后,就可以联合圆的半径长度获得某个角度在圆上的坐标,如下:
因sin值又是直角三角形中角的对边和直角三角形斜边的比值,所以在坐标系中,r为半径的圆上,
某个弧度为n的角度在圆上的坐标(△x,△y) ,有 △x/r = cos(n) 以及 △y/r = sin(n)
所以某个角度的 x轴距离△x=cos(n)* r , y轴距离△y= sin(n)* r:
那么如果把一个半径为r长度的圆10等分,36°对应的坐标(x,y) => (cos(M_PI/5)*r, sin(M_PI/5)*r)
36° * 2 = 72°对应的坐标为:( cos(2*M_PI/5), sin(2*M_PI/5) )
36° * 3 = 108°对应的坐标为:( cos(3*M_PI/5), sin(3*M_PI/5) )
。。。