c# 二维图形绘制实践

news2024/11/25 6:52:19

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 运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络(1) OSI七层模型与TCP/IP四层模型

一.OSI七层模型 OSI 七层模型是国际标准化组织ISO提出的一个网络分层模型,它的目的是使各种不同的计算机和网络在世界范围内按照相同的标准框架实现互联。OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、…

小魔推-短视频矩阵批量创作一键分发同城引流工具

​小魔推是一款短视频营销裂变推广工具,主要服务于想做短视频营销的实体商家,通过BGC、PGC、UGC的打造帮助商家实现流量裂变与转化。 其中,小魔推AI矩阵营销是借助AI技术帮助企业/商家搭建营销矩阵,让商家拥有足够多的账号、足够…

matlab-2-simulink-小白教程-如何绘制电路图进行电路仿真

以上述电路图为例:包含D触发器,时钟CLK,与非门 一、启动simulink的三种方式 方式1 在MATLAB的命令行窗口输入“Simulink”命令。 方式2 在MATLAB主窗口的“主页”选项卡中,单击“SIMULINK”命令组中的Simulink命令按钮。 方式3 从MATLAB…

最小二乘法原理及其代码实现

一、最小二乘法原理 假设目前我们有一些数据,x是输入,y是与之对应的输出。现在想利用这些已有的数据,从中发现出规律,来预测没有出现过的输入会产生什么样的输出。 假设系统为单输入单输出系统,我们想在这个系统里找到…

【TB作品】MSP430F5529 单片机,数字时钟设计与实现,整点时通过蜂鸣器播放音乐进行报时

基于单片机的数字时钟设计与实现 作品名称 基于MSP430单片机的OLED显示数字时钟 作品功能 本作品实现了一个具有时间显示和整点报时功能的数字时钟。通过OLED屏幕显示当前时间,用户可以通过按键设置时间,并在整点时通过蜂鸣器播放音乐进行报时。 作…

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件 Affinity Designer 2, Affinity Photo 2, Affinity Publisher 2 请访问原文链接:Serif Affinity 2.5 (macOS, Windows) - 专业创意软件,查看最新版。原创作品,转载请保留出处。 作者主…

如何优化仓库布局与ERP库存管理

一、引言 随着企业规模的不断扩大,仓库管理和库存控制成为企业运营中不可或缺的一环。优化仓库布局和提高ERP库存管理效率,对于降低企业成本、提高物流效率、增强企业竞争力具有重要意义。 二、优化仓库布局 1. 分析仓库需求 在优化仓库布局之前&…

【学习笔记】Linux

Linux 1、 介绍 1.1、概述 1.2、特点 1.3、Linux的发行版2、 基础篇 —— 文件系统 2.1、文件系统 2.2、目录结构3、 基础篇 —— VI/VIM 编辑器 3.1、概述 3.2、编辑器模式及常用命令4、 基础篇 —— 网络配置 4.1、VMware NetWork …

【Linux】shell——条件判断test,各种运算符,expr

条件判断——test 真——0 假——1 test expression or [ expression ] 整数运算符 字符串运算符 -z 长度是否为0 -n 长度是否不为0 str1 str2 str1 ! str2 补 &&-->逻辑与,前面为真后面才会执行 || -->逻辑或,前面为假后面才…

【算法实战】每日一题:18.1并查集知识点讲解以及算法实战

1.题目 给定一个序列,通过n-1次相邻元素的合并操作,恢复原始序列。 2.涉及知识点 - 并查集 (Union-Find) 并查集 (Union-Find) 详解 概述 并查集(Union-Find),也称为不相交集数据结构,用于处理一些不相…

MFC案例:利用SetTimer函数编写一个“计时器”程序

一、希望达成效果 利用基于对话框的MFC项目,做一个一方面能够显示当前时间;另一方面在点击开始按钮时进行读秒计时,计时结果动态显示,当点击结束时读秒结束并保持最后结果。 二、编程步骤及相关代码、注释 1、启动VS…

OA协同办公系统 iWebPDF插件安装

1、下载压缩文件 iweboffice,并进行解压 链接:https://pan.baidu.com/s/1GQd7000PTZ771ifL5KEflg 提取码:hb56 2、安装iWenpdf2018.exe 3、安装金格中间件外部应用 4、测试了谷歌、360安全,发现安装插件后,只有360极…

BP8519C非隔离降压型恒压芯片

BP8519封装和丝印 BP8519封装和丝印 注意: 该芯片为非隔离ACDC电源芯片,非专业人员请勿使用。专业人员在使用时必须注意防护,避免触电。 非隔离ACDC电源芯片,国内有多家半导体厂商生产,在部分追求低价格的低端仪表、灯…

vivado HW_SIO_GTGROUP、HW_SIO_IBERT

HW_SIO.GTGROUP 描述 GT组与硬件设备上的GT IO组相关,具有可用的数量 GT引脚和组由目标Xilinx FPGA确定。在Kintex-7 xc7k325部件上,用于 例如,有四个GT组,每个组包含四个差分GT引脚对。每个GT pin有自己的接收器hw_sio_rx和发射器…

人工智能GPT-4o?

对比分析 在讨论GPT-4o时,我们首先需要了解其前身,即GPT-4,以及其之前的版本。GPT系列从GPT-1到GPT-4经历了多次迭代,每一次都带来了显著的进步。 GPT-4 vs GPT-4o: 1. **参数规模:** GPT-4o在参数规模上…

PyTorch 张量数据类型

【数据类型】Python 与 PyTorch 常见数据类型对应: 用 a.type() 获取数据类型,用 isinstance(a, 目标类型) 进行类型合法化检测 >>> import torch >>> a torch.randn(2,3) >>> a tensor([[-1.7818, -0.2472, -2.0684],[ 0.…

iOS ------ 对象的本质

一,OC对象本质,用clang编译main.m OC对象结构都是通过基础的C/C结构体实现的,我们通过创建OC文件及对象,将OC对象转化为C文件来探寻OC对象的本质。 代码: interface HTPerson : NSObject property(nonatomic,strong)…

什么是SOLIDWORKS科研版

随着科技的不断进步,工程设计和科学研究变得越来越复杂,需要更强大的工具来满足需求。SOLIDWORKS科研版就是在这样的背景下诞生的,它为科研人员和工程师提供了一套全方面、快捷的解决方案,以应对各种科研和工程挑战。 SOLIDWORKS科…

Surface安装Windows和Ubuntu双系统方法(包括Ubuntu适配触控屏的方法)

这是一个目录0.0 前言让我们从一块砖头开始现在你有了能进入windows系统的surface并且想安装Ubuntu现在Ubuntu也有了再见 前言 之前我的Surface装上Ubuntu了好好的,能用,但是Ubuntu原本的内核是不支持很多Surface的功能的,比如触控屏&#xf…

串口调试助手软件(ATK-XCOM) 版本:v2.0

串口设置 软件启动后,会自动搜索可用的串口,可以显示详细的串口信息,由于兼容性原因某些电脑可能不会显示。 超高波特率接收,在硬件设别支持的情况下,可自定义波特率,点“自定义”即可输入您想要的波特率&…