c# 二维图形绘制实践

1.等边三角形

1.1 概述

1.2 代码

using System;
using System.Drawing;
using System.Windows.Forms;

public partial class TriangleForm : Form
{
    public TriangleForm()
    {
        //InitializeComponent();
        // 确保窗体大小足够大,以容纳三角形  
        this.ClientSize = new Size(300, 300);
        this.DoubleBuffered = true; // 启用双缓冲,以减少绘图时的闪烁  
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        // 定义三角形的大小和位置  
        int sideLength = 100; // 等边三角形外接圆的半径
        int centerX = this.ClientSize.Width / 2; // 三角形中心点的X坐标  
        int centerY = this.ClientSize.Height / 2; // 三角形中心点的Y坐标  

        // 将30度转换为弧度  
        double degrees = 30;
        double radians = Math.PI * degrees / 180;
        double sinValue = Math.Sin(radians);
        double cosValue = Math.Cos(radians);

        float sinLen = (float)sinValue * sideLength;
        float cosLen = (float)cosValue * sideLength;
        // 计算三角形顶点的位置  
        PointF topVertex = new PointF(centerX, centerY - sideLength );
        PointF leftVertex = new PointF(centerX - cosLen, centerY + sinLen);
        PointF rightVertex = new PointF(centerX + cosLen, centerY + sinLen);

        // 创建一个Brush对象来填充三角形  
        using (SolidBrush brush = new SolidBrush(Color.LightBlue))
        {
            // 绘制等边三角形  
            e.Graphics.FillPolygon(brush, new PointF[] { topVertex, leftVertex, rightVertex });

            // 如果你还想绘制三角形的边框,可以使用Pen对象  
            using (Pen pen = new Pen(Color.Black, 2))
            {
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex, leftVertex, rightVertex });
            }
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TriangleForm());
    }
}

1.3 运行结果

2 立方体

2.1 概要

立方体是用等边三角型的图转换过来的

2.2 代码

using System;
using System.Drawing;
using System.Windows.Forms;

public partial class TriangleForm : Form
{
    public TriangleForm()
    {
        //InitializeComponent();
        // 确保窗体大小足够大,以容纳三角形  
        this.ClientSize = new Size(300, 300);
        this.DoubleBuffered = true; // 启用双缓冲,以减少绘图时的闪烁  
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        // 定义三角形的大小和位置  
        int sideLength = 100; // 等边三角形的边长  
        int centerX = this.ClientSize.Width / 2; // 三角形中心点的X坐标  
        int centerY = this.ClientSize.Height / 2; // 三角形中心点的Y坐标  

        // 将30度转换为弧度  
        double degrees = 30;
        double radians = Math.PI * degrees / 180;
        double sinValue = Math.Sin(radians);
        double cosValue = Math.Cos(radians);

        float sinLen = (float)sinValue * sideLength;
        float cosLen = (float)cosValue * sideLength;
        //中心点
        PointF topVertex_center = new PointF(centerX, centerY);
        // 计算三角形顶点的位置  
        PointF topVertex = new PointF(centerX, centerY - cosLen);
        PointF topVertex_left = new PointF(centerX - cosLen, centerY - cosLen + sinLen);
        PointF leftVertex = new PointF(centerX - cosLen, centerY + sinLen);
        PointF topVertex_buttom = new PointF(centerX, centerY + sinLen*2);
        PointF rightVertex = new PointF(centerX + cosLen, centerY + sinLen);

        PointF topVertex_right = new PointF(centerX + cosLen, centerY - cosLen + sinLen);

        // 创建一个Brush对象来填充三角形  
        using (SolidBrush brush = new SolidBrush(Color.LightBlue))
        {
            // 绘制等边三角形  
            //e.Graphics.FillPolygon(brush, new PointF[] { topVertex, leftVertex, rightVertex });

            // 如果你还想绘制三角形的边框,可以使用Pen对象  
            using (Pen pen = new Pen(Color.Black, 2))
            {
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex, topVertex_left, leftVertex, topVertex_buttom, rightVertex, topVertex_right });
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex_center, topVertex_left });
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex_center, topVertex_right });
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex_center, topVertex_buttom });
            }
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TriangleForm());
    }
}

2.3 运行结果

 

3 立方体透视图

3.1 概要

透视图是用前面的立方体,去移动顶点演化出来的

3.2 代码

using System;
using System.Drawing;
using System.Net;
using System.Windows.Forms;

public partial class TriangleForm : Form
{
    public TriangleForm()
    {
        //InitializeComponent();
        // 确保窗体大小足够大,以容纳三角形  
        this.ClientSize = new Size(300, 300);
        this.DoubleBuffered = true; // 启用双缓冲,以减少绘图时的闪烁  
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        // 定义三角形的大小和位置  
        int sideLength = 100; // 等边三角形的边长  
        int centerX = this.ClientSize.Width / 2; // 三角形中心点的X坐标  
        int centerY = this.ClientSize.Height / 2; // 三角形中心点的Y坐标  

        // 将30度转换为弧度  
        double degrees = 30;
        double radians = Math.PI * degrees / 180;
        double sinValue = Math.Sin(radians);
        double cosValue = Math.Cos(radians);

        float sinLen = (float)sinValue * sideLength;
        float cosLen = (float)cosValue * sideLength;
        float y_yi = 20;
        float x_yi = 10;
        //中心点
        PointF topVertex_center = new PointF(centerX+ x_yi, centerY- y_yi);
        PointF topVertex_center_hou = new PointF(centerX - x_yi, centerY + y_yi);

        // 计算三角形顶点的位置  
        PointF topVertex = new PointF(centerX- x_yi, centerY - cosLen+ y_yi);
        PointF topVertex_left = new PointF(centerX - cosLen, centerY - cosLen + sinLen);
        PointF leftVertex = new PointF(centerX - cosLen, centerY + sinLen);
        PointF topVertex_buttom = new PointF(centerX+ x_yi, centerY + sinLen*2- y_yi);
        PointF rightVertex = new PointF(centerX + cosLen, centerY + sinLen);

        PointF topVertex_right = new PointF(centerX + cosLen, centerY - cosLen + sinLen);

        // 创建一个Brush对象来填充三角形  
        using (SolidBrush brush = new SolidBrush(Color.LightBlue))
        {
            // 绘制等边三角形  
            //e.Graphics.FillPolygon(brush, new PointF[] { topVertex, leftVertex, rightVertex });

            // 如果你还想绘制三角形的边框,可以使用Pen对象  
            using (Pen pen = new Pen(Color.Black, 2))
            {
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex, topVertex_left, leftVertex, topVertex_buttom, rightVertex, topVertex_right });
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex_center, topVertex_left });
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex_center, topVertex_right });
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex_center, topVertex_buttom });
            }

            float[] dashValues = { 50, 5 }; // 虚线由5个像素的实线和5个像素的空白组成  
            Pen dashedPen = new Pen(Color.Black, 1);
            e.Graphics.DrawLine(dashedPen, topVertex_center_hou, leftVertex);
            e.Graphics.DrawLine(dashedPen, topVertex_center_hou, rightVertex);
            e.Graphics.DrawLine(dashedPen, topVertex_center_hou, topVertex);
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TriangleForm());
    }
}

3.3 运行结果

4.等边三角形的内切圆和外接圆

4.1 概要

4.2 代码

using System;
using System.Drawing;
using System.Net;
using System.Windows.Forms;

public partial class TriangleForm : Form
{
    public TriangleForm()
    {
        //InitializeComponent();
        // 确保窗体大小足够大,以容纳三角形  
        this.ClientSize = new Size(300, 300);
        this.DoubleBuffered = true; // 启用双缓冲,以减少绘图时的闪烁  
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        // 定义三角形的大小和位置  
        int sideLength = 100; // 内接圆半径
        int centerX = this.ClientSize.Width / 2; // 三角形中心点的X坐标  
        int centerY = this.ClientSize.Height / 2; // 三角形中心点的Y坐标  

        // 将30度转换为弧度  
        double degrees = 30;
        double radians = Math.PI * degrees / 180;
        double sinValue = Math.Sin(radians);
        double cosValue = Math.Cos(radians);

        float sinLen = (float)sinValue * sideLength;
        float cosLen = (float)cosValue * sideLength;

        // 计算三角形顶点的位置  
        PointF topVertex = new PointF(centerX, centerY - sideLength);
        PointF leftVertex = new PointF(centerX - cosLen, centerY + sinLen);
        PointF rightVertex = new PointF(centerX + cosLen, centerY + sinLen);

        // 设置圆形的边界矩形(位置和大小)  
        Rectangle rect = new Rectangle(centerX- (int)sinLen, centerY- (int)sinLen, (int)(sinLen*2), (int)(sinLen*2)); // x=50, y=50, 宽度=100, 高度=100
        Rectangle rect2 = new Rectangle(centerX - (int)sideLength, centerY - (int)sideLength, sideLength*2, sideLength*2); // x=50, y=50, 宽度=100, 高度=100

        // 创建一个Brush对象来填充三角形  
        using (SolidBrush brush = new SolidBrush(Color.LightBlue))
        {
            // 绘制等边三角形  
            //e.Graphics.FillPolygon(brush, new PointF[] { topVertex, leftVertex, rightVertex });

            // 如果你还想绘制三角形的边框,可以使用Pen对象  
            using (Pen pen = new Pen(Color.Black, 2))
            {
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex,  leftVertex, rightVertex, });

                e.Graphics.DrawEllipse(pen, rect2);
                e.Graphics.DrawEllipse(pen, rect);
            }
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TriangleForm());
    }
}

4.3 运行结果

5.直角三角形的内接圆

5.1 概要

5.2 代码

using System;
using System.Drawing;
using System.Net;
using System.Windows.Forms;

public partial class TriangleForm : Form
{
    public TriangleForm()
    {
        //InitializeComponent();
        // 确保窗体大小足够大,以容纳三角形  
        this.ClientSize = new Size(300, 300);
        this.DoubleBuffered = true; // 启用双缓冲,以减少绘图时的闪烁  
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        // 定义三角形的大小和位置  
        int sideLength = 50; // 内接圆半径
        int centerX = this.ClientSize.Width / 2; // 三角形中心点的X坐标  
        int centerY = this.ClientSize.Height / 2; // 三角形中心点的Y坐标  

        // 将30度转换为弧度  
        double degrees = 22.5;
        double radians = Math.PI * degrees / 180;
        double sinValue = Math.Sin(radians);
        double cosValue = Math.Cos(radians);
        double tanValue = Math.Tan(radians);

        float sinLen = (float)sinValue * sideLength;
        float cosLen = (float)cosValue * sideLength;
        float tanLen = (float)(sideLength/ tanValue);

        // 计算三角形顶点的位置  
        PointF topVertex = new PointF(centerX+ sideLength, centerY - tanLen);
        PointF leftVertex = new PointF(centerX - tanLen, centerY + sideLength);
        PointF rightVertex = new PointF(centerX + sideLength, centerY + sideLength);

        // 设置圆形的边界矩形(位置和大小)  
        //Rectangle rect = new Rectangle(centerX - (int)sinLen, centerY - (int)sinLen, (int)(sinLen * 2), (int)(sinLen * 2)); // x=50, y=50, 宽度=100, 高度=100
        Rectangle rect2 = new Rectangle(centerX - (int)sideLength, centerY - (int)sideLength, sideLength * 2, sideLength * 2); // x=50, y=50, 宽度=100, 高度=100

        // 创建一个Brush对象来填充三角形  
        using (SolidBrush brush = new SolidBrush(Color.LightBlue))
        {
            // 绘制等边三角形  
            //e.Graphics.FillPolygon(brush, new PointF[] { topVertex, leftVertex, rightVertex });

            // 如果你还想绘制三角形的边框,可以使用Pen对象  
            using (Pen pen = new Pen(Color.Black, 2))
            {
                e.Graphics.DrawPolygon(pen, new PointF[] { topVertex, leftVertex, rightVertex, });

                e.Graphics.DrawEllipse(pen, rect2);
                //e.Graphics.DrawEllipse(pen, rect);
            }
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new TriangleForm());
    }
}

5.3 运行结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/719139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot相关的一些知识

SpringBoot可以同时处理多少请求 SpringBoot默认的内嵌容器是Tomcat,所以SpringBoot可以同时处理多少请求取决于Tomcat。 SpringBoot中处理请求数量相关的参数有四个: server.tomcat.thread.min-spare:最少的工作线程数,默认大小…

表单中的常用元素

10.图像形式上传文件 <input type“image”>定义图像形式的提交。 src 属性和alt属性必须与<input type“image””>结合使用。 input type"image"src"img/l.jpg"alt"submit"/> 11.下拉列表框 <select>标签定义下拉列表框…

ubuntu 20.04禁止自动更新内核驱动、显卡驱动(使用命令行)

本文目录 一、禁止更新内核1.1 查看当前内核1.2 查看安装的内核1.3 根据需求&#xff0c;使用hold参数禁止固定内核1.4 查询被锁定不更新软件包的状态 二、禁止更新显卡驱动2.1 查看安装的显卡驱动2.2 查看详细的详细的显卡信息2.3 禁止显卡驱动更新2.4 查询显卡是否设置成功 前…

EE trade:现货黄金杠杆比例的计算方法

现货黄金杠杆交易是一种利用保证金进行交易的方式&#xff0c;允许投资者用较少的资金控制较大的交易量&#xff0c;从而放大收益或损失。杠杆比例的计算方法相对简单&#xff0c;主要取决于交易所需的保证金和实际交易金额之间的关系。 杠杆比例的计算公式 杠杆比例 实际交…

SoC设计更重要的是IP管理

对于大多数片上系统&#xff08;SoC&#xff09;设计来说&#xff0c;最关键的任务不是RTL编码&#xff0c;甚至不是创建芯片架构。今天&#xff0c;SoC的设计主要使用来自多个供应商的各种IP块。这使得管理硅IP成为SoC设计过程中的主要任务。 一般来说&#xff0c;新编写的RTL…

【挑战100天首通《谷粒商城》】-【第一天】【10 番外篇】 解决docker 仓库无法访问 + MobaXterm连接VirtualBox虚拟机

文章目录 课程介绍 1、解决docker 仓库无法访问 2、 MobaXterm连接VirtualBox虚拟机 Stage 1&#xff1a;下载MobaXterm选择适合你的版本 Stage 2&#xff1a;vagrant ssh 连接&#xff0c;开启ssh访问 Stage 2-1&#xff1a;su获取root账号权限,输入密码&#xff08;默认vagra…

微软修复Wi-Fi驱动高危漏洞 影响Windows所有版本 可通过局域网发起攻击

微软修复 WiFi 驱动程序中的高危安全漏洞&#xff0c;该漏洞影响 Windows 所有版本&#xff0c;可以通过公共 WiFi 等发起攻击。如果攻击者能够接入到目标设备所处的网络中&#xff0c;则可以悄无声息完成攻击&#xff0c;不需要用户进行任何交互。 在本月例行安全更新中微软修…

深入理解@EnableAspectJAutoProxy

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

【分享】WinRAR如何加密压缩文件?

WinRAR除了用来解压缩文件&#xff0c;还可以作为一款加密软件&#xff0c;给压缩文件设置密码保护&#xff0c;今天一起来看看&#xff0c;WinRAR的3种加密方法。 方法1&#xff1a;设置单次加密 如果偶尔需要给压缩文件设置密码&#xff0c;可以使用单次加密方法。 首先&am…

Spring技术——介绍、初识

从这篇博客正式开始学习 Spring 。 一、整个Spring技术学习的介绍 首先先对 Spring 做一个简单的认识&#xff0c;并从以下3个方面了解学习Spring 技术的意义&#xff1a; &#xff08;1&#xff09;为什么要学习 Spring 技术&#xff1f; 1、它的市场的占有率很高&#xff…

【AI工具】探索创意与效率:xs.tools 网站介绍

在这个数字化时代,工具的创新和效率对我们的日常工作和生活至关重要。"xs.tools" 网站是一个汇集了众多有趣且实用的小工具的平台,它不仅帮助用户快速找到所需的工具,还能激发灵感,提升创造力。 一、网站概览 "xs.tools" 提供了一个简洁而直观的界面…

阻塞队列:ArrayBlockingQueue和LinkedBlockingQueue区别

文章目录 1、阻塞队列具有以下特点&#xff1a;2、以下是几个常见的应用场景3、ArrayBlockingQueue和LinkedBlockingQueue区别 阻塞队列(BlockingQueue)是一种特殊类型的队列&#xff0c;它用于在多线程环境中实现线程之间的通信。 阻塞队列的实现通常依赖于底层的锁机制和条件…

展厅设计要遵守哪些原则

1、定位要准确 企业文化展厅是比较稳固的&#xff0c;是长期的存在于企业管理内部的&#xff0c;因此在企业展厅设计的时候需要有正确的定位&#xff0c;要从传统工艺&#xff0c;选材&#xff0c;设计风格和价格等的方面&#xff0c;进行一个整体的分析&#xff0c;能准确的掌…

Spring和SpringBoot(概述与功能)

目录 一、SpringBoot 概念 &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;部分注解 &#xff08;3&#xff09;其它介绍 ​编辑 二、 Spring 缺点 &#xff08;1&#xff09;配置繁琐 &#xff08;2&#xff09;依赖繁琐 三、SpringBoot 功能&#xff0…

LDO电容选型指南

1 为什么电容的选择至关重要 电容往往被人们所忽视&#xff0c;在许多工程师的心目中&#xff0c;电容不过是两个导体加上中间的隔离电解质。总而言之&#xff0c;它们属于最低级的电子元件之一。 工程师们通常通过添加一些电容的办法来解决噪声问题。这是因为他们普遍将电容视…

EEtrade:现货黄金交易中的建仓指南

现货黄金是一种重要的投资方式&#xff0c;为投资者提供了良好的盈利环境。为了在这个市场中取得成功&#xff0c;投资者必须掌握建仓的技巧和策略。以下是有关如何进行现货黄金建仓的详细指南。 一、建仓基本概念 建仓&#xff0c;也叫开仓&#xff0c;是指在现货黄金交易中…

敏捷开发时代,彻底结束了

最近&#xff0c;我收到一位读者的私信&#xff0c;他最近“内耗”得非常厉害&#xff0c;他可能一时兴起把我的私信当作了吐槽箱。 他们公司一直实行敏捷的管理模式&#xff0c;复盘发现了一个问题&#xff1a;发布与迭代具有强相关性&#xff0c;一个迭代就发布一次&#xf…

C++语法13 单分支结构的相关问题详解

一、奇偶数问题 要判断一个数是否是偶数&#xff0c;只要判断这个数字能不能被2整除即可。如果一个数字a除以2&#xff0c;没有余数&#xff0c;那么就是偶数&#xff1b;如果除以2有余数&#xff0c;那么就是奇数。 if(a%20) a是偶数 if(a%21) a是奇数 训练&#xff1…

2-Matplotlib是什么

Matplotlib是什么 Matplotlib 是一款用于数据可视化的 Python 软件包&#xff0c;支持跨平台运行&#xff0c;它能够根据 NumPy ndarray 数组来绘制 2D 图像&#xff0c;它使用简单、代码清晰易懂&#xff0c;深受广大技术爱好者喜爱。 NumPy 是 Python 科学计算的软件包&…

【面试干货】常见的编译时异常(运行时异常)及其处理

【面试干货】常见的编译时异常&#xff08;运行时异常&#xff09;及其处理 1、SQLException2、IOException3、FileNotFoundException4、ClassNotFoundException5、EOFException6、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Jav…