ping_chang_xin 2023-08-08 15:56 采纳率: 33.3%
浏览 16
已结题

画图 利用gdi怎么画夹角

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

img

  • 写回答

6条回答 默认 最新

  • CyMylive. 新星创作者: python技术领域 2023-08-09 04:09
    关注

    要画带角度的夹角,需要使用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窗体中绘制带角度标识的夹角。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月9日
  • 已采纳回答 8月9日
  • 修改了问题 8月8日
  • 赞助了问题酬金15元 8月8日
  • 展开全部