利用EasyX绘制国旗

news2024/11/27 0:25:05

所谓国庆,举国同庆

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

需要利用到前边的知识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.coloradmin.cn/o/1056178.html

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

相关文章

【1++的Linux】之进程(五)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;什么是进程替换二&#xff0c;替换函数三&#xff0c;实现我们自己的shell 一&#xff0c;什么是进程替换 我们创建出来进程是要其做事情的&#xff0c;它可…

用类继承计算长方体体积

编写ClassA收集长、宽、高键盘输入&#xff0c;编写ClassB继承ClassA并拟方法计算长方体体积。 (本笔记适合正在研习Class类的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自…

入门运维之MySQL管理

一、系统数据库 Mysql数据库安装完成后,自带了以下四个数据库,具体作用如下: 1.1常用工具 1.1.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。 语法 :mysql [options] [database] 选项 :-u, --user=name #指定用户名-p, --password[=name] #指定密码-h,…

mfc140u.dll是什么文件?mfc140u放在哪个文件夹?详细修复教程

今天我想和大家分享一个非常常见的问题——mfc140u.dll丢失的困扰以及解决方法。 首先&#xff0c;让我们来了解一下什么是mfc140u.dll。这是一个非常重要的动态链接库文件&#xff0c;它是Microsoft Foundation Class Library的一个组件。许多软件和游戏都需要这个文件的支持才…

品牌数字人IP如何从虚拟到现实快速出圈?

在数智化时代&#xff0c;数字人如何赋能品牌IP&#xff0c;为品牌挖掘出更多的增长机会&#xff1f;近日&#xff0c;纯甄馋酸奶官数字人“解小馋”以一支精致的CG视频正式亮相。 *图片源于网络 品牌数字人以CG动画可以让品牌形象更具象化&#xff0c;通过数字人三维动画的形…

前期开发用最内聚环境,最直观简单的方法管理代码

代码稍微一多我们就会思考代码如何去规划和管理&#xff0c;首先想到MVN等管理工具去帮助我们&#xff0c;结果配置了好长时间感觉不是很方便。首先因为没有系统去了解这个工具的使用方法&#xff0c;另外发现IDEA在原本松散的工具之间以插件的形式做了一定的配置&#xff0c;将…

【办公自动化】在Excel中按条件筛选数据并存入新的表(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Filter/过滤器基本使用

&#x1f600;前言 本篇博文是关于Filter/过滤器基本使用&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x…

Scala第十五章节

Scala第十五章节 1. 递归 2. 案例一: 求阶乘 3. 案例二: 斐波那契数列 4. 案例三: 打印目录文件 scala总目录 文档资料下载

mybatis-关联关系一对多关联多对一关联多对多

目录 1. 准备 2. 一对多关联查询 2.1 创建Model 2.2 创建Mapper层 2.3 创建service层 2.4 创建测试类进行测试 3. 多对一关联关系 4. 多对多 1. 准备 通过脚本创建相关的数据表&#xff1a;一对多&#xff08;db1-n.txt&#xff09; 2. 一对多关联查询 2.1 创建Model…

Python无废话-基础知识列表list详讲

本文详细的介绍了在Python中如何处理list数据类型&#xff0c;涉及了Python 基础知识列表list 详讲&#xff0c;包含list 定义、遍历循环、元素获取、切片、添加、删除、查找元素&#xff0c;以后列表在函数、copy中使用。 列表List数据类型 列表特征 1) 列表中的各个元素&…

实现水平垂直居中的十种方式

本文节选自我的博客&#xff1a;实现水平垂直居中的十种方式 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是MilesChen&#xff0c;偏前端的全栈开发者。&#x1f4dd; CSDN主页&#xff1a;爱吃糖的猫&#x1f525;&#x1f4e3; 我的博客&#xff1a;爱吃糖的猫&…

leetcode:2806. 取整购买后的账户余额(python3解法)

难度&#xff1a;简单 一开始&#xff0c;你的银行账户里有 100 块钱。 给你一个整数purchaseAmount &#xff0c;它表示你在一次购买中愿意支出的金额。 在一个商店里&#xff0c;你进行一次购买&#xff0c;实际支出的金额会向 最近 的 10 的 倍数 取整。换句话说&#xff0c…

网络工程师学习中但是发现这个岗位非常卷怎么办

大家好&#xff0c;我是网络工程师成长日记实验室的郑老师&#xff0c;您现在正在查看的是网络工程师成长日记专栏&#xff0c;记录网络工程师日常生活的点点滴滴 有个同学说&#xff0c;他说现在有很多培训机构搞的这个网络工程师也非常卷。他现在还没有入行&#xff0c;他现在…

Scala第十四章节

Scala第十四章节 1. 隐式转换和隐式参数介绍 2. 隐式转换 3. 隐式参数 4. 案例: 获取列表元素平均值 scala总目录 文档资料下载

计算机竞赛 深度学习疫情社交安全距离检测算法 - python opencv cnn

文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习疫情社交安全距离检测算法 ** 该项目较为新颖&#xff0c;适合作为竞赛…

神经网络中的知识蒸馏

多分类交叉熵损失函数&#xff1a;每个样本的标签已经给出&#xff0c;模型给出在三种动物上的预测概率。将全部样本都被正确预测的概率求得为0.70.50.1&#xff0c;也称为似然概率。优化的目标就是希望似然概率最大化。如果样本很多&#xff0c;概率不断连乘&#xff0c;就会造…

手把手教你用 Milvus 和 Towhee 搭建一个 AI 聊天机器人

作为向量数据库的佼佼者,Milvus 适用于各种需要借助高效和可扩展向量搜索功能的 AI 应用。 举个例子,如果想要搭建一个聊天机器人,Milvus 一定是其进行数据管理的首选。那么,如何让这个应用程序开发变得易于管理及更好理解,那就需要借助 Towhee(https://towhee.io/)了。…

PHP 反序列化漏洞:__PHP_Incomplete_Class 与 serialize(unserialize($x)) !== $x;

文章目录 参考环境声明__PHP_Incomplete_Class灵显为什么需要 __PHP_Incomplete_Class&#xff1f;不可访问的属性 serialize(unserialize($x)) $x;serialize(unserialize($x)) ! $x;雾现__PHP_Incomplete_Class 对象与其序列化文本的差异试构造 __PHP__Incomplete_Class 对象…

JMeter学习第一、二、三天

JMeter介绍 Apache JMeter 是一个开源软件&#xff0c;它最初被设计为用来进行压力测试和性能测试&#xff0c;但后来添加了更多的测试功能&#xff0c;如功能测试和服务测试等。JMeter 可以用于分析和衡量各种服务的性能&#xff0c;包括网络服务、数据库、FTP服务器、HTTP服务…