利用EasyX绘制国旗

所谓国庆,举国同庆

今天我就来分享一下利用图形库来制作一个比例版缩小的五星红旗(尽量精确了)

需要利用到前边的知识note2基本图形的绘制


进入正题

五星红旗的长和高之比为三比二

创建一个长为960像素,宽为640像素的窗体

更改窗体背景为红色,代码如下


int main()
{initgraph(960, 640);setbkcolor(RED);cleardevice();getchar();closegraph();return 0;
}

运行后效果如图

接下来绘制五角星

大星星直径为旗高的十分之三,即半径为96,小五角星的直径为旗高的十分之一,半径为16

绘制五角星代码如下

int main()
{initgraph(800, 600);setorigin(400, 300);setaspectratio(1, -1);//绘制坐标系int r = 200;//半径//初始角度double theta = Pai / 2;//递增角度double delta = 4 * Pai / 5;POINT points[5];//定义一个数组,存放点的坐标for (int i = 0; i < 5; i++){points[i].x = cos(theta + i * delta) * r;points[i].y = sin(theta + i * delta) * r;}setfillcolor(YELLOW);fillpolygon(points, 5);getchar();closegraph();return 0;
}

但当我们使用solid填充时却发现绘制出的填充图形如下,我用了一个比较麻烦的方法实现,我在网上搜了很多,没有发现使用EasyX绘制填充三角形的方法,应该有更好的方法欢迎大家留言

只能填充出上边的图形后再重新填充内部的梯形

知道了内部梯形的边长后,每个点的坐标是外接点的坐标偏移36°,外接圆长度变化,就可以绘制出一个填充的五角星

抽取出一个绘制五角星的函数

void Point(int x, int y, int r, double r1, double theta)
{double delta = 4 * Pai / 5;POINT points[5];//定义一个数组,存放点的坐标for (int i = 0; i < 5; i++){points[i].x = cos(theta + i * delta) * r+x;points[i].y = sin(theta + i * delta) * r+y;}setfillcolor(YELLOW);solidpolygon(points, 5);double delta1 = delta / 2;POINT points1[5];//定义一个数组,存放点的坐标for (int i = 0; i < 5; i++){points[i].x = cos(theta + i * delta1 + Pai / 5) * r1+x;points[i].y = sin(theta + i * delta1 + Pai / 5) * r1+y;}setfillcolor(YELLOW);solidpolygon(points, 5);
}

误差还是存在的,但很小,不影响,可以适当增大内部梯形的大小,让绘制出的五角星更好看一些

运行后如图

接下来计算每个小五角星的位置和偏转角度,已经了解了大五角星和小五角星的外接圆半径,就可以绘制出五个五角星了。

大五角星(x,y)坐标为(-32*10,32*5),半径为96。

最上边的五角星坐标为(-32*5,32*8),半径为32。计算机计算结果5.83/5的反正弦函数结果为59°多一点,设置首偏转角为90°加120°.

第二个五角星坐标为(-32*3,32*6),半径32。根号50结果为7.07,正弦值为0.141,角度为81.8°设置偏转角为90加100°

第三个五角星坐标为(-96,-96),其他不变

第四个五角星坐标为(-160,32),根号41结果为6.4,角度为51.4°,设置偏转角为90加51.4°

代码如下

	Point(-320, 160, 96,96/2.5, Pai / 2);Point(-160, 256, 32, 32 / 2.5, Pai / 2 + 2 * Pai / 3);Point(-96, 192, 32, 32 / 2.5, Pai / 2 + 10 * Pai / 18);Point(-96, 96, 32, 32 / 2.5, Pai / 2);Point(-160, 32, 32, 32 / 2.5, Pai / 2+51.4*Pai/180);

运行后如图

全部代码如下

void Point(int x, int y, int r, double r1, double theta)
{double delta = 4 * Pai / 5;POINT points[5];//定义一个数组,存放点的坐标for (int i = 0; i < 5; i++){points[i].x = cos(theta + i * delta) * r+x;points[i].y = sin(theta + i * delta) * r+y;}setfillcolor(YELLOW);solidpolygon(points, 5);double delta1 = delta / 2;POINT points1[5];//定义一个数组,存放点的坐标for (int i = 0; i < 5; i++){points[i].x = cos(theta + i * delta1 + Pai / 5) * r1+x;points[i].y = sin(theta + i * delta1 + Pai / 5) * r1+y;}setfillcolor(YELLOW);solidpolygon(points, 5);
}int main()
{initgraph(960, 640);setorigin(480, 320);setaspectratio(1, -1);setbkcolor(RED);cleardevice();//line(0, 300, 0, -300);//line( 300, 0, -300,0);Point(-320, 160, 96,96/2.5, Pai / 2);Point(-160, 256, 32, 32 / 2.5, Pai / 2 + 2 * Pai / 3);Point(-96, 192, 32, 32 / 2.5, Pai / 2 + 10 * Pai / 18);Point(-96, 96, 32, 32 / 2.5, Pai / 2);Point(-160, 32, 32, 32 / 2.5, Pai / 2+51.4*Pai/180);getchar();closegraph();return 0;
}

实现过程较为繁琐,如果有那些地方可以改进或者有问题希望大家能指正,谢谢大家!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3.0跨端Web SDK访问微信小程序云储存,文件上传路径不存在/文件受损无法显示问题(已解决)

整理需求&#xff1a; 需要vue3.0作为pc端的后台管理来连接微信小程序客户端需要Web SDK的引入&#xff0c;实现vue3.0接入云开发环境需要以云环境作为线上服务器&#xff0c;将vue3.0上传的本地文件通过云环境进入云储存&#xff0c;并将文件在云端生成云端快捷访问路径及htt…

排序---P1781 宇宙总统

思路&#xff1a; 当我们要对这些超大数进行比较排序时&#xff0c;如果我们用int或long基本数据类型时&#xff0c;会超出能承载的范围&#xff0c;因此我们选择用引用数据类型&#xff1a;BigDecimal或BigInteger。 区别在于基本数据类型直接比较大小&#xff0c;而是调用这…

【吞噬星空】连播两集,尼赫鲁对徐欣动手,罗峰修分身强势复仇

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析吞噬星空资讯。 吞噬星空动画第四季定档之后&#xff0c;官方真的是太宠粉了&#xff0c;每天都会公布全新预告情报&#xff0c;无论是外星人物角色&#xff0c;亦或者宇宙星球建模&#xff0c;那都是相当的炸裂。如今更…

python操作.xlsx文件

from openpyxl import load_workbook from openpyxl.styles import Font,colors, Alignment from openpyxl.styles import Border, Side #打开已经存在的Excel workbook load_workbook(filenameC:\\Users\\yh\\Documents\\测试.xlsx) #创建表&#xff08;sheet&#xff09;,插…

ubuntu下源码编译方式安装opencv

基础条件 ubuntu 20.04 opencv 3.4.3 opencv 源码编译的安装步骤 第一步&#xff0c; 首先clone源码 git clone https://github.com/opencv/opencv.git第二步&#xff0c;依赖包&#xff0c;执行下面的命令 sudo apt-get install build-essential sudo apt-get install cmak…

基于Springboot实现餐厅点餐系统演示【项目源码+论文说明】分享

基于Springboot实现餐厅点餐系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff…

【新的小主机】向日葵远程控制ubuntu

向日葵远程控制ubuntu 一、简介二、问题及解决方法2.1 向日葵远程连接Ubuntu22主机黑屏&#xff1f;2.2 Ubuntu如何向日葵开机自启&#xff1f;2.3 无显示器情况下&#xff0c;windows远程桌面连接Ubuntu? 三、美化桌面3.1 安装/解压3.2 设置 四、安装docker容器及部署微服务4…

【考研数学】高等数学第七模块 —— 曲线积分与曲面积分 | 3. 对面积的曲面积分(第一类曲面积分)

文章目录 二、曲面积分2.1 对面积的曲面积分&#xff08;第一类曲面积分&#xff09;2.1.1 问题引入 —— 曲面的质量2.1.2 对面积的曲面积分定义及性质2.1.3 对面积的曲面积分的计算法 写在最后 二、曲面积分 2.1 对面积的曲面积分&#xff08;第一类曲面积分&#xff09; 2…

LIMS实验室信息管理系统源码 基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体

LIMS 是一个集现代化管理思想与基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体&#xff0c;以实验室业务和管理工作为核心&#xff0c;遵循实验室管理国际规范&#xff0c;实现对实验室全方位管理的信息管理系统。 LIMS将样品管理、数据管理…

基于51单片机NEC协议红外遥控发送接收仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

基于51单片机NEC协议红外遥控发送接收仿真设计 讲解视频1.主要功能&#xff1a;2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机NEC协议红外遥控发送接收仿真设计 51单片机红外发送接收仿真设计( proteus仿真程序原理图报告讲解视频…

阿里云RDS关系型数据库详细介绍_多版本数据库说明

阿里云RDS关系型数据库大全&#xff0c;关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等&#xff0c;NoSQL数据库如Redis、Tair、Lindorm和MongoDB&#xff0c;阿里云百科分享阿里云RDS关系型数据库大全&#xff1a; 目录 阿里云RDS关系型数据库大全 …

德国云安全协作软件提供商【Rencore】完成800万美元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于德国慕尼黑的云安全协作软件提供商Rencore今日宣布已完成800万美元融资。 本轮融资由UVC Partners领投。 该公司打算利用这笔资金进一步投资于其云协作治理产品的增长。 Rencore由Matthi…

小谈设计模式(12)—迪米特法则

小谈设计模式&#xff08;12&#xff09;—迪米特法则 专栏介绍专栏地址专栏介绍 迪米特法则核心思想这里的“朋友”指当前对象本身以参数形式传入当前对象的对象当前对象的成员变量直接引用的对象目标 Java程序实现程序分析 总结 专栏介绍 专栏地址 link 专栏介绍 主要对目…

EasyEdge 智能边缘控制台通过sdk发布应用

离线部署SDK生成 模型部署完成后会出现下载SDK的按钮&#xff0c;点击按钮下载SDK并保存好SDK。 进入EasyDL官网的技术文档 安装智能边缘控制台 跟着教程&#xff0c;完成安装&#xff1a;点此链接 树莓派4b是Linux arm64的架构&#xff0c;点击对应的链接进行下载。 下载完成…

OCI 发布了容器运行时和镜像规范!

7 月 19 日是开放容器计划Open Container Initiative&#xff08;OCI&#xff09;的一个重要里程碑&#xff0c;OCI 发布了容器运行时和镜像规范的 1.0 版本&#xff0c;而 Docker 在这过去两年中一直充当着推动和引领的核心角色。 我们的目标是为社区、客户以及更广泛的容器行…

PHP 反序列化漏洞:身份标识

文章目录 参考环境访问修饰符访问修饰符PHP 与访问修饰符 手写身份标识身份标识定义身份标识控制字符 NUL在 PHP 中如何表示空字符&#xff1f; 通过空字符尝试构建包含非公共属性对象的序列化文本 空字符的传输控制字符的不可打印性结论另辟蹊径URL 字符编码将非 ASCII 字符文…

【进阶C语言】自定义类型

本节内容大致目录如下&#xff1a; 1.结构体 2.位段 3.枚举 4.联合&#xff08;共用体&#xff09; 以上都是C语言中的自定义类型&#xff0c;可以根据我们的需要去定义。 一、结构体 一些基础知识在初阶C语言的时候已经介绍过&#xff0c;在这里粗略概括&#xff1b;重…

wxWidgets(1):在Ubuntu 环境中搭建wxWidgets 库环境,安装库和CodeBlocks的IDE,可以运行demo界面了,继续学习中

1&#xff0c;选择使用 wxWidgets 框架 选择这个主要是因为完全的开源&#xff0c;不想折腾 Qt的库&#xff0c;而且打包的文件比较大。 网络上面有很多的对比&#xff0c;而且使用QT的人比较多。 但是我觉得wxwidgets 更加偏向 c 语法本身&#xff0c;也有助学习C。 没有太多…

RAID知识点总结

目录 RAID类型 RAID的数据组织及存取方式 RAID热备与重构 RAID逻辑卷 常见的RAID RAID0 RAID 1 RAID3 RAID 5 RAID 6 RAID组合 RAID 10 RAID 50 总结 RAID技术对比 RAID的应用场景 RAID2.0 使用RAID2.0的原因 RAID2.0的发展 RAID2.0技术&#xff1a;两层虚拟…

【深入探究人工智能】:历史、应用、技术与未来

深入探究人工智能 前言人工智能的历史人工智能的应用人工智能的技术人工智能的未来当代的人工智能产物结语&#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &am…