• C# 绘制简单图形


    先来个等边倒三角形练手:

    点1 0,0

    点2 100,0

    点3 cos(60),sin(60)

    var p4 = new Point();
    p4.X = 0;
    p4.Y = 0;
    
    var p5 = new Point();
    p5.X = width;
    p5.Y = 0;
    
    a = 60; // 角度
    var p6 = new Point();
    p6.X = (int)(0 + width * (Math.Cos(Math.PI *a/180d)));
    p6.Y = (int)(0 + width * (Math.Sin(Math.PI *a/180d)));
    
    points[0] = p4;
    points[1] = p5;
    points[2] = p6;
    points[3] = p4;
             
    Graphics g = e.Graphics;
    var p = new Pen(Color.Black);
    g.DrawLines(p, points);

     利用刚才的成果,绘制一个等边六角形:

    var points = new Point[7];
    var width = 100;
    int a = 60;
    
    var p1 = new Point();
    p1.X = 0;
    p1.Y = (int)(0 + width * (Math.Sin(Math.PI * a / 180d)));
    
    var p2 = new Point();
    p2.X = (int)(0 + width * (Math.Cos(Math.PI * a / 180d)));
    p2.Y = 0;
    
    var p3 = new Point();
    p3.X = p2.X + width;
    p3.Y = 0;
    
    var p4 = new Point();
    p4.X = p2.X + p3.X;
    p4.Y = (int)(0 + width * (Math.Sin(Math.PI * a / 180d)));
    
    var p5 = new Point();
    p5.X = p3.X;
    p5.Y = p1.Y * 2;
    
    var p6 = new Point();
    p6.X = p2.X;
    p6.Y = p5.Y;
                
    points[0] = p1;
    points[1] = p2;
    points[2] = p3;
    points[3] = p4;
    points[4] = p5;
    points[5] = p6;
    points[6] = p1;
    
    Graphics g = e.Graphics;
    var p = new Pen(Color.Black);
    g.DrawLines(p, points);

    再来一个:

    a = 30;
    var p1 = new Point();
    p1.X = 0;
    p1.Y = (int)(0 + width * (Math.Sin(Math.PI * a / 180d)));
    
    var p2 = new Point();
    p2.X = (int)(0 + width * (Math.Cos(Math.PI * a / 180d)));
    p2.Y = 0;
    
    var p3 = new Point();
    p3.X = p2.X * 2;
    p3.Y = p1.Y;
    
    var p4 = new Point();
    p4.X = p3.X;
    p4.Y = p3.Y + width;
    
    var p5 = new Point();
    p5.X = p2.X;
    p5.Y = p4.Y + p1.Y;
    
    var p6 = new Point();
    p6.X = 0;
    p6.Y = p1.Y + width;
    
    points[0] = p1;
    points[1] = p2;
    points[2] = p3;
    points[3] = p4;
    points[4] = p5;
    points[5] = p6;
    points[6] = p1;

    最终效果图:

     给六边形加两个内圆:

    // 画一个内圆
    var x = width - (int)(0 + width * (Math.Cos(Math.PI * a / 180d))); ;
    var y = 0;
    p.Color = Color.DarkBlue;
    g.DrawEllipse(p, x, y, (width - x) * 2, (width - x) * 2);
    
    // 画一个内圆
    x = 0;
    y = width - (int)(0 + width * (Math.Cos(Math.PI * a / 180d)));
    p.Color = Color.Violet;
    g.DrawEllipse(p, x, y, (width - y) * 2, (width - y) * 2);

  • 相关阅读:
    THINKPAD E40部分问题解疑(抛砖引玉……)
    VS 智能感知失效问题的解决方法
    Distinct()通过使用默认的相等比较器对值进行比较返回序列中的非重复元素。
    dhl:阻止保存要求重新创建表的更改
    linq ef4.0 的联表 Include方法 代替联表操作
    l.cn 代码学习
    CSS解决未知高度垂直居中的问题
    Resharper 下载及使用方法
    网站大并发处理解决方案
    使用的 SQL Server 版本不支持数据类型“datetime2”解决办法
  • 原文地址:https://www.cnblogs.com/z5337/p/16513899.html
Copyright © 2020-2023  润新知