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