我在QT中重新创建这个量规,并且在彩色带部分出现问题。我希望能够从仪表上的任何位置(20到50之间)对乐队进行着色。
如果我使用drawarc函数,数学会令人困惑吗?
量规圆直径为300,所以我知道半径为150:
此仪表有101个可能的值,0到100,并且使用了270度
float totalRads = 2 * pi * 0.75; // total radians for 270 degrees
float valueRads = totalRads/101;
float startRads = (135 * 2 * pi) / 360.0; // start radian for "0" on gauge
barwidth是我想要彩色弧的宽度:
float startAngle = atan2(startpoint.x(), startpoint.y()); // ex 20 on gauge
float EndAngle = atan2(endpoint.x(), endpoint.y()); // ex 50 on gauge
painter.drawArc(barwidth, barwidth, 2 * (150 - barWidth), 2 * (150 - barWidth),
-angle1 * 16, angle2 * 16);
这不符合我的预期。
基本上它只是在完全出乎意料的圆圈区域画了一小段:
答案 0 :(得分:1)
你的角度错了。
startAngle和spanAngle必须以1/16度指定, 即整圆等于5760(16 * 360)。积极的价值观 角度表示逆时针,而负值表示顺时针 方向。零度位于3点钟位置。
所以,如果你想在你的仪表上绘制一个20到50的圆弧: 3 o'时钟位置为0度。这意味着20位于相反位置= 180度。
=> startAngle = 16 * 180。
50从这个位置开始顺时针旋转90度。
=> endAngle = -16 * 90.
计算不算太多。当然不是atan2。