以DrawArc為例,它有一種形式如下的構造函數
public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepAngle);
對於startAngle和sweepAngle,MSDN對它的解釋是
startAngle: 從 x 軸到弧線的起始點沿順時針方向度量的角(以度為單位)。
sweepAngle:從 startAngle 參數到弧線的結束點沿順時針方向度量的角(以度為單位)。
可能博主理解力不怎么樣,一直不明白X軸到弧線起始點應該怎么計算,后面查了一些資料才弄明白了,通過下面例子來具體剖析
private void button1_Click(object sender, EventArgs e) { Graphics graphics = CreateGraphics(); Pen myPen = new Pen(Color.Red); Pen pen1 = new Pen(Color.Green,3); Rectangle rec1 = new Rectangle(50,50, 100, 60); graphics.DrawRectangle(myPen, rec1); //繪制矩形 graphics.DrawArc(pen1, rec1, 0, 90); //繪制圓弧 }
當點擊button1后,效果如下
這是怎么來的呢?其實很簡單,首先在矩形的中點建立一個坐標系,圓弧起點到中點的連線與X軸的夾角為startAngle,圓弧的起點、終點分別和rect定義的矩形的中點連線,兩條線段之間夾角就是sweepAngle
起點到O的連線與X軸的夾角為startAngle,終點到O的連線與起點到O的連線的夾角為sweepAngle。
當角度取負值的時候,表示逆時針方向,否則都為順時針方向,如將上例中的sweepAngle改成-90,即
graphics.DrawArc(pen1, rec1, 0, -90);
則結果如下
如果對GDI+有興趣,可以參閱我之前寫的博客 GDI+ 編程之繪圖