首页 > 编程语言 >c# 二维图形绘制实践

c# 二维图形绘制实践

时间:2024-06-12 11:05:57浏览次数:28  
标签:PointF topVertex c# 二维 centerX centerY new 三角形 绘制

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

 

标签:PointF,topVertex,c#,二维,centerX,centerY,new,三角形,绘制
From: https://blog.csdn.net/xie__jin__cheng/article/details/139599591

相关文章

  • 【平头哥开源CPU——玄铁C910】开源项目库配置和前仿真记录
    C910开源项目库配置C910开源项目库中有很多问题,比如我做到makecompile的时候一直在报错无法找到工程下的某个文件,主要原因是平头哥官方提供的环境变量配置文件类型是.csh的,而我的linux工作站里没有csh而且没有联网。所以把csh文件内容做了修改也成功跑通了,现在分享一下。......
  • gcc编译时报错 fatal error: stdio.h: 没有那个文件或目录
    在kylinV10中使用GCC编译代码时遇到如下问题:首先确认了,自己单词没有拼写错。然后再检查GCC的版本,确实没问题。没有标准的头文件需要安装build-essential来解决。需要安装build-essential。执行以下命令:sudoapt-getinstallbuild-essential如无兼容版本可使用可使用ap......
  • Deploy Kafka for Centos 7
    应用介绍Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写,用于处理消费者在网站中的所有动作流数据。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来......
  • 为何使用isaac gym做强化学习
    前言   本文仅对比Gazebo,Pybullet,IsaacGym三款仿真软件。详细对比可参考:Gazebo,Pybullet,IsaacGym用于强化学习训练对比-CSDN博客1仿真软件概述Gazebo:    Gazebo提供高保真的物理仿真,适合复杂的机器人模拟和实际应用中的验证。支持多种传感器和机器人模......
  • 云效codeup
    云效codeup什么是云效codeup云效codeup操作代码库代码托管代码检测代码提交代码评审代码迁移使用感受及建议什么是云效codeup云效代码管理(Codeup)是阿里云云效一站式BizDevOps平台提供的自研代码管理服务,为企业提供代码托管、代码评审、代码检测、代码搜索等服务,全......
  • Steam游戏启动受阻:有效应对bcrypt.dll文件缺失的解决方案
    面对Steam游戏启动时“bcrypt.dll文件缺失”的提示,玩家无需沮丧。通过几个简单步骤,包括验证游戏文件、安装必要运行库、系统文件检查等,即可轻松跨越这道障碍,重返游戏战场。本文速递解决方案,助你无缝继续游戏之旅。1.重新安装游戏首先,尝试从Steam库中卸载游戏,然后重新安装。......
  • LeetCode 300. 最长递增子序列
    更多题解尽在https://sugar.matrixlab.dev/algorithm每日更新。组队打卡,更多解法等你一起来参与哦!LeetCode300.最长递增子序列,难度中等。动态规划解题思路:遍历数组,对于每个nums[i],检查其之前的所有元素nums[j]0......
  • Excel甘特
    1、数据 2、全选日期(从8到22的所有日期) 3、为全选日期新增规则 规则1(当前日期>=开始日期,当前日期<=结束日期) 公式里面$符号去掉格式如下 格式化如下  点确定如下 规则2(超过当前日期) ......
  • 爬虫 | 处理cookie的基本方法——session
    很多网页要求登录后,才能查看对应的信息,整个流程是:客户端服务器玩家登录返回cookie获得cookie后继续访问其他页面根据cookie查验身份,返回对应内容session会话,理解为可以连续请求,先提交data换来cookie,然后可以带着cook......
  • Web应用课 第二讲 CSS定义方式、选择器、颜色
    定义方式行内样式表:只作用在单个元素<!--CSS定义方式1:行内样式表--><imgsrc="/static/images/mountain.jpg"alt="山1"width="300"><imgsrc="/static/images/mountain.jpg"alt="山2"style="width:30%;&quo......