需求:在 WinForm 中繪製帶刻度數字的圓形儀表盤(如圖)。
(cx, cy),半徑 R。N 等分(如 20 份),每份角度 angle = 2π/N。i 刻度線端點:x = cx + R * Math.Sin(i * angle)y = cy - R * Math.Cos(i * angle)(Y 軸向下)。DrawString,需計算字符寬高居中。protected override void OnPaint(PaintEventArgs e) {
var g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;
int cx = Width/2, cy = Height/2, R = Math.Min(cx, cy) - 20;
for (int i = 0; i < 20; i++) {
double rad = i * 2 * Math.PI / 20;
int x1 = cx + (int)(R * 0.9 * Math.Sin(rad));
int y1 = cy - (int)(R * 0.9 * Math.Cos(rad));
int x2 = cx + (int)(R * Math.Sin(rad));
int y2 = cy - (int)(R * Math.Cos(rad));
g.DrawLine(Pens.Black, x1, y1, x2, y2);
if (i % 5 == 0) {
string txt = (i/5).ToString();
var sz = g.MeasureString(txt, Font);
g.DrawString(txt, Font, Brushes.Black,
x2 - sz.Width/2, y2 - sz.Height/2);
}
}
// 中心文本框/標籤用控件佈局,不在 OnPaint 畫
}
this.DoubleBuffered = true; 防閃爍。Sin/Cos。