1. 程式人生 > >C# GDI+編程之剖析startAngle和sweepAngle

C# GDI+編程之剖析startAngle和sweepAngle

ref red angle gdi+ forever send 圖片 之前 pub

  以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+ 編程之繪圖

C# GDI+編程之剖析startAngle和sweepAngle