c# 利用GDI+,动态给出这三个点,顶点o,上边坐标点a,下边坐标点b,,怎么画出带角度的夹角呢,如下图的样式,请帮忙给出Demo谢谢

c# 利用GDI+,动态给出这三个点,顶点o,上边坐标点a,下边坐标点b,,怎么画出带角度的夹角呢,如下图的样式,请帮忙给出Demo谢谢

关注要画带角度的夹角,需要使用GDI+中的绘图类Graphics和Pen来绘制直线和角度标识。
以下是C#代码示例,其中oPoint,aPoint和bPoint分别代表顶点、上边坐标点和下边坐标点:
private void DrawAngle(Point oPoint, Point aPoint, Point bPoint, Graphics graphics, Pen pen)
{
// 计算角度
double angle = Math.Atan2(aPoint.Y - oPoint.Y, aPoint.X - oPoint.X) - Math.Atan2(bPoint.Y - oPoint.Y, bPoint.X - oPoint.X);
angle = angle * 180 / Math.PI;
if (angle < 0) angle += 360;
// 绘制直线
graphics.DrawLine(pen, oPoint, aPoint);
graphics.DrawLine(pen, oPoint, bPoint);
// 绘制角度标识
string angleText = angle.ToString("0.0") + "°";
Font font = new Font("Arial", 10);
SizeF textSize = graphics.MeasureString(angleText, font);
PointF textPoint = new PointF(oPoint.X + 20, oPoint.Y - textSize.Height);
graphics.DrawString(angleText, font, Brushes.Black, textPoint);
// 绘制角度弧线
RectangleF rect = new RectangleF(oPoint.X - 50, oPoint.Y - 50, 100, 100);
float startAngle = (float)Math.Atan2(bPoint.Y - oPoint.Y, bPoint.X - oPoint.X) * 180 / (float)Math.PI;
float sweepAngle = (float)angle;
graphics.DrawArc(pen, rect, startAngle, sweepAngle);
}
在使用此方法时,需要在Paint事件中调用它,并传递Graphics对象和Pen对象,例如:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen pen = new Pen(Color.Black, 2);
Point oPoint = new Point(100, 100);
Point aPoint = new Point(200, 50);
Point bPoint = new Point(200, 150);
DrawAngle(oPoint, aPoint, bPoint, e.Graphics, pen);
}
这将在Form1窗体中绘制带角度标识的夹角。