使用System.Drawing绘制基本几何图形

news2025/1/17 3:45:18

1.使用System.Drawing绘制一个正方形

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

public partial class MyForm : Form
{
    public MyForm()
    {
        // 你可以在这里设置Form的双缓冲,以避免绘制时出现的闪烁  
        this.DoubleBuffered = true;
    }

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

        // 创建一个Pen对象,用于绘制正方形  
        using (Pen pen = new Pen(Color.Black, 2)) // 你可以更改颜色和线条宽度  
        {
            // 设置正方形的位置和大小  
            // 在这个例子中,我们从(50, 50)开始,大小为100x100  
            Rectangle rect = new Rectangle(50, 50, 100, 100);

            // 使用Graphics对象的DrawRectangle方法来绘制正方形  
            e.Graphics.DrawRectangle(pen, rect);
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

 

2. 使用System.Drawing绘制一个长方形

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

public partial class MyForm : Form
{
    public MyForm()
    {
        // 你可以在这里设置Form的双缓冲,以避免绘制时出现的闪烁  
        this.DoubleBuffered = true;
    }

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

        // 创建一个Pen对象,用于绘制长方形  
        using (Pen pen = new Pen(Color.Black, 2)) // 你可以更改颜色和线条宽度  
        {
            // 设置长方形的位置和大小  
            // 在这个例子中,我们从(50, 50)开始,宽度为200,高度为100  
            Rectangle rect = new Rectangle(50, 50, 200, 100);

            // 使用Graphics对象的DrawRectangle方法来绘制长方形  
            e.Graphics.DrawRectangle(pen, rect);
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

3.使用System.Drawing绘制一个圆形

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

public partial class MyForm : Form
{
    public MyForm()
    {
        // 你可以在这里设置Form的双缓冲,以避免绘制时出现的闪烁  
        this.DoubleBuffered = true;
    }

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

        // 创建一个Pen对象,用于绘制圆形的边框  
        using (Pen pen = new Pen(Color.Black, 2)) // 你可以更改颜色和线条宽度  
        {
            // 创建一个Brush对象,用于填充圆形(如果需要的话)  
            using (Brush brush = new SolidBrush(Color.LightBlue)) // 你可以更改填充颜色  
            {
                // 设置圆形的位置和大小  
                // 在这个例子中,圆心在(100, 100),半径为50  
                int centerX = 100;
                int centerY = 100;
                int radius = 50;

                // 绘制圆形的边框(使用DrawEllipse方法)  
                e.Graphics.DrawEllipse(pen, centerX - radius, centerY - radius, 2 * radius, 2 * radius);

                // 如果你想要填充圆形,可以使用FillEllipse方法  
                // e.Graphics.FillEllipse(brush, centerX - radius, centerY - radius, 2 * radius, 2 * radius);  
            }
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

 

4.使用System.Drawing绘制一个三角形 

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

public partial class MyForm : Form
{
    public MyForm()
    {
        // 你可以在这里设置Form的双缓冲,以避免绘制时出现的闪烁  
        this.DoubleBuffered = true;
    }

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

        // 创建一个Pen对象,用于绘制三角形的边  
        using (Pen pen = new Pen(Color.Black, 2)) // 你可以更改颜色和线条宽度  
        {
            // 设置三角形的三个顶点  
            Point point1 = new Point(50, 50);
            Point point2 = new Point(150, 50);
            Point point3 = new Point(100, 150);

            // 绘制三条线以构成三角形  
            e.Graphics.DrawLine(pen, point1, point2);
            e.Graphics.DrawLine(pen, point2, point3);
            e.Graphics.DrawLine(pen, point3, point1);
        }
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

 

5.使用System.Drawing绘制一个五角星 

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

public partial class MyForm : Form
{
    public MyForm()
    {
        // 你可以在这里设置Form的双缓冲,以避免绘制时出现的闪烁  
        this.DoubleBuffered = true;
    }

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

        // 创建一个Pen对象,用于绘制五角星  
        using (Pen pen = new Pen(Color.Black, 2)) // 你可以更改颜色和线条宽度  
        {
            // 设定五角星的中心点  
            int centerX = 100;
            int centerY = 100;

            // 设定五角星的外接圆半径  
            int radius = 50;

            // 设定五角星的旋转角度(如果需要)  
            double rotateAngle = Math.PI / 2; // 从上顶点开始  

            // 计算五角星的五个顶点  
            PointF[] starPoints = CalculateStarPoints(centerX, centerY, radius, 5, rotateAngle);

            // 绘制五角星  
            for (int i = 0; i < starPoints.Length; i++)
            {
                int nextIndex = (i + 1) % starPoints.Length;
                e.Graphics.DrawLine(pen, starPoints[i], starPoints[nextIndex]);
            }
        }
    }

    // 计算五角星的顶点  
    private PointF[] CalculateStarPoints(float centerX, float centerY, float radius, int spikes, double rotation)
    {
        PointF[] result = new PointF[spikes];

        double outerRadius = radius; // 外接圆半径  
        double innerRadius = radius * 0.5f * Math.Sqrt(3); // 内接圆半径(五角星的特殊值)  

        double angle = Math.PI / 2 * 3 - spikes * Math.PI / spikes; // 第一个顶点的角度  

        for (int i = 0; i < spikes; i++)
        {
            result[i].X = (float)(centerX + Math.Cos(angle + rotation) * outerRadius);
            if (i % 2 == 0)
            {
                result[i].Y = (float)(centerY + Math.Sin(angle + rotation) * outerRadius);
            }
            else
            {
                result[i].Y = (float)(centerY + Math.Sin(angle + rotation) * innerRadius);
            }

            angle += Math.PI / spikes;
        }

        return result;
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

 

6.使用System.Drawing绘制一个圆外切三角形 

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

public partial class MyForm : Form
{
    public MyForm()
    {
        // 你可以在这里设置Form的双缓冲,以避免绘制时出现的闪烁  
        this.DoubleBuffered = true;
    }

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

        // 定义三角形的边长  
        int sideLength = 100;

        // 计算外接圆的半径  
        double radius = sideLength / (2 * Math.Sqrt(3));

        // 设定外接圆的中心点和三角形的中心点  
        int centerX = this.ClientSize.Width / 2;
        int centerY = this.ClientSize.Height / 2;

        // 计算三角形的顶点  
        PointF[] trianglePoints = CalculateEquilateralTrianglePoints(centerX, centerY, sideLength);

        // 绘制外接圆  
        using (Pen circlePen = new Pen(Color.Blue, 2))
        {
            e.Graphics.DrawEllipse(circlePen, centerX - (int)radius, centerY - (int)radius, (int)(radius * 2), (int)(radius * 2));
        }

        // 绘制三角形  
        using (Pen trianglePen = new Pen(Color.Black, 2))
        {
            e.Graphics.DrawLines(trianglePen, trianglePoints);
        }
    }

    // 计算等边三角形的三个顶点  
    private PointF[] CalculateEquilateralTrianglePoints(int centerX, int centerY, int sideLength)
    {
        PointF[] points = new PointF[3];

        double angle = Math.PI / 3; // 等边三角形内角的一半  

        // 第一个顶点(上方)  
        points[0] = new PointF(centerX, centerY - sideLength / 2);

        // 第二个顶点(右侧)  
        points[1] = new PointF(
            (float)(centerX + sideLength / 2 * Math.Cos(angle)),
            (float)(centerY + sideLength / 2 * Math.Sin(angle))
        );

        // 第三个顶点(左侧)  
        points[2] = new PointF(
            (float)(centerX + sideLength / 2 * Math.Cos(-angle)),
            (float)(centerY + sideLength / 2 * Math.Sin(-angle))
        );

        return points;
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

7.使用System.Drawing绘制一个圆内接三角形

 

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

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

相关文章

论文阅读:Self-Consistency Improves Chain of Thought Reasoning in Language Models

思维链 prompt 与预训练的大型语言模型相结合&#xff0c;在复杂的推理任务上取得了令人鼓舞的结果。在本文中&#xff0c;作者提出了一种新的解码策略&#xff0c;即自我一致性&#xff08;self-consistency&#xff09;&#xff0c;以取代思维链 prompt 中使用的 naive 贪婪解…

易货模式:引领交易新潮流,实现资源高效利用

随着全球经济的繁荣和科技的日新月异&#xff0c;传统的交易模式正面临革新。在追求高效、便捷与环保的当下&#xff0c;易货模式作为一种新兴的交易方式&#xff0c;逐渐崭露头角&#xff0c;受到越来越多人的青睐。 易货模式&#xff0c;简而言之&#xff0c;就是通过平台或在…

AI日报:OpenAI全能模型GPT-4o发布;阿里推自动化视频剪辑神器;AI作品会侵权吗?调研结果...;零一万物开源Yi-1.5模型

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;https://top.aibase.com/ 1、干翻所有语音助手&#x…

FreeRTOS中的动态内存管理(heap_1、heap_2、heap_3、heap_4)

FreeRTOS 提供了多种动态内存分配方案&#xff0c;这些方案通过不同的内存管理器&#xff08;heap managers&#xff09;实现&#xff0c;主要位于 FreeRTOS/Source/portable/MemMang 目录下。以下是几种常见的动态内存分配方案&#xff1a; heap_1 特点&#xff1a; 简单性…

np.linalg.norm()

np.linalg.norm()是NumPy中用于计算向量或矩阵的范数的函数。它可以计算不同类型的范数&#xff0c;包括向量的L1范数、L2范数以及矩阵的Frobenius范数等。 基本用法如下, numpy.linalg.norm(x, ordNone, axisNone, keepdimsFalse) x&#xff1a;输入数组&#xff0c;可以是…

【linux系统学习教程 Day02】网络安全之Linux系统学习教程,管道,文件内容统计,过滤排序,去重,目录介绍

1-4 管道 管道符号&#xff1a; | &#xff0c;可以将前面指令的执行结果&#xff0c;作为后面指令的操作内容。 ## 比如过滤ip地址 ip addr | tail -4 | head -1 解释一下就是先执行 ip addr ,得到的结果当做 tail -4 的输入&#xff0c;意思就是查看ip addr 结果的后四行内容…

高清模拟视频采集卡CVBS四合一信号采集设备解析

介绍一款新产品——LCC261高清视频采集与编解码一体化采集卡。这款高品质的产品拥有卓越的性能表现和丰富多样的功能特性&#xff0c;能够满足广大用户对于高清视频采集、处理以及传输的需求。 首先&#xff0c;让我们来了解一下LCC261的基本信息。它是一款基于灵卡技术研发的高…

linux学习:视频输入+V4L2

目录 V4L2 视频采集流程 代码例子 核心命令字和结构体 VIDIOC_ENUM_FMT VIDIOC_G_FMT / VIDIOC_S_FMT / VIDIOC_TRY_FM VIDIOC_REQBUFS VIDIOC_QUERYBUF VIDIOC_QBUF /VIDIOC_DQBUF VIDIOC_STREAMON / VIDIOC_STREAMOFF V4L2 是 Linux 处理视频的最新标准代码模块&…

苹果M4芯片:大模型本地运算的转折点

在人工智能和机器学习领域&#xff0c;大模型的兴起对硬件提出了前所未有的挑战。苹果公司最近推出的M4芯片&#xff0c;被视为其在这场竞赛中的“第一式”。本文将探讨M4芯片的特点&#xff0c;并与其他芯片进行比较。 M4芯片的亮点 Neural Engine算力&#xff1a;M4芯片的…

2024上半年软考准考证什么时候出?怎么打印?

2024上半年软考准考证打印时间&#xff1a; 北京&#xff1a;5月21日至5月24日 天津&#xff1a;5月21日9:00后 河北&#xff1a;5月20日起 山西&#xff1a;5月20日上午9:00至5月28日下午14:00 内蒙古&#xff1a;5月20日-5月25日 吉林&#xff1a;5月20日开始 辽宁&am…

批量剪辑与转码解析:一键实现MP4到FLV顺畅转换的技巧

在数字化多媒体日益盛行的今天&#xff0c;视频格式转换成为了我们日常生活和工作中不可或缺的一部分。尤其是当需要将MP4格式的视频转换为FLV格式时&#xff0c;批量剪辑与转码功能的出现&#xff0c;极大地提升了我们处理视频的效率。本文将为您详细解析云炫AI智剪如何一键实…

基于CLAHE算法的图像增强及评价

摘要&#xff1a; 本研究旨在探讨对比度限制自适应直方图均衡化&#xff08;CLAHE&#xff09;算法在数字图像处理中的应用。CLAHE算法通过在局部区域内进行直方图均衡化&#xff0c;有效地增强了图像的对比度&#xff0c;并在保持图像细节的同时避免了过度增强的问题。本文通过…

深入学习Linux内核之v4l2驱动框架(一)

一&#xff0c;概述 V4L2&#xff08;Video for Linux 2&#xff09;是Linux操作系统中用于支持摄像头和视频设备的框架。它提供了一组API和驱动程序接口&#xff0c;用于在Linux系统中进行视频采集、视频流处理和视频播放等操作。 V4L2的设计目标是支持多种设备&#xff0c;…

机器学习-KNN算法

机器学习-KNN算法 没有什么比顺其自然更有超凡的力量。没有什么比顺乎本性更具有迷人的魔力。 目录 机器学习-KNN算法 1.K近邻算法 2.KNN决策方式 1&#xff09;KNN分类预测规则 1&#xff09;KNN回归预测规则 3.KNN三要素 4.KNN算法实现方式 1&#xff09;蛮力实现 2&a…

C++ C# 贝塞尔曲线

二阶贝塞尔曲线公式 三阶贝塞尔曲线公式 C 三维坐标点 二阶到N阶源码 //二阶公式&#xff1a; FVector BezierUtils::CalculateBezierPoint(float t, FVector startPoint, FVector controlPoint, FVector endPoint) {float t1 (1 - t) * (1 - t);float t2 2 * t * (1 - t);…

【JS红宝书学习笔记】第1、2章 初识JS

第1章 什么是JavaScript JavaScript 是一门用来与网页交互的脚本语言&#xff0c;包含以下三个组成部分。 ECMAScript&#xff1a;由 ECMA-262 定义并提供核心功能。文档对象模型&#xff08;DOM&#xff09;&#xff1a;提供与网页内容交互的方法和接口。浏览器对象模型&…

Dubbo3.x 异步转同步源码

底层netty通信是异步的&#xff0c;那我们平时调用采取的同步是如何将底层的异步转为同步的呢&#xff1f; dubbo远程rpc协议和网络框架有多种&#xff0c;我们以默认的dubbo协议、网络框架netty作为切入点. 注意点&#xff1a;debug时将过期时间设置长一点&#xff1a; 调用…

【高阶数据结构】并查集 {并查集原理;并查集优化;并查集实现;并查集应用}

一、并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类…

2024年Java程序员的职业发展路径

程序员的职业路径是非常清晰的&#xff0c;但是现实情况下&#xff0c;很多人卡在了高级开发就再也上不去&#xff0c;直到遇到职业发展的危机&#xff0c;比如&#xff1a; 35岁大龄程序员找工作难&#xff0c;国内很多大型互联网公司在招聘要求上&#xff0c;会限制35岁这个年…

记录Spring Boot 2.3.4.RELEASE版注解方式实现AOP和通知的执行顺序

1.advice 按照以下的顺序执行 输出结果&#xff1a;(正常和异常) 说明&#xff1a;Spring boot 2.3.4.RELEASE 版本使用的AOP是spring-aop-5.2.9.RELEASE&#xff0c;AOP的通知顺序不一样。 可以测试下Spring boot 2.1.1.RELEASE 版做对比&#xff0c;发现结果是不一样的。 2…