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

  以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+ 编程之绘图

原文地址:https://www.cnblogs.com/forever-Ys/p/10457999.html