EASYX实现多物体运动

eg1:单个物体运动使用easyx实现单个小球的运动

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define PI 3.14
#define NODE_WIDTH 40int main()
{// 创建画布initgraph(800, 600);//将坐标轴移动到中间setorigin(400, 300);// 将坐标轴的x轴和y轴反转方向setaspectratio(1, -1);setbkcolor(RGB(164, 225, 202));// 清除画布cleardevice();// 定义一个int类型的圆心坐标int x = 0; int y = 0;// 小球在x 和 y方向上的速度分量int vx = 5; int vy = 5;// 小球的半径int r = 20;// 通过while循环不断的重新绘制小球while (1) {// 清除一次画布cleardevice();// 以原点坐标为x,y然后半径为R不断的绘制小球solidcircle(x, y, r);// 每次绘制一次休眠40毫秒Sleep(40);//  表示小球碰到或者越过上下边界后反弹if (y >= 300 - r || y <= -300 + r) {vy = -vy; // 表示的是不能操过画布规定的空间大小}if (x <= -400 + r || x >= 400 - r) {vx = -vx; // 表示的是不能操过画布规定的空间大小}// 在每次绘制后小球的圆心需要增加vx 或者是vy像素x += vx;y += vy;}// 延迟响应getchar();// 关闭画布closegraph();return 0;}

eg2:多个小球的不规则运动

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define PI 3.14
#define NODE_WIDTH 40
// 定义符号常量表示小球的数量
#define NUM_OF_BALLS 1000
// 结构体的定义,定义每一个小球需要使用到的分量
typedef struct {// 小球圆心的x y 坐标int x;int y;// 小球x y方向上的速度分量int vx;int vy;// 小球的颜色,应该区随机值COLORREF color;
}ball;int main()
{// 创建画布initgraph(800, 600);//将坐标轴移动到中间setorigin(400, 300);// 将坐标轴的x轴和y轴反转方向setaspectratio(1, -1);setbkcolor(WHITE);// 设置小球的描边颜色setlinecolor(BLACK);// 清除画布cleardevice();/*创建结构类型的数据,编写程序的过程中要避免声明自动类型的数据,自动类型的数组数据是存放在程序的运行栈中的内存的为程序的运行栈空间较小对此可以使用malloc函数向栈中申请内存空间,栈中的空间较大可以有效的避免数组存储空间不够的问题*/ // ball balls[NUM_OF_BALLS];int r = 10;ball* balls = (ball*)malloc(sizeof(ball) * NUM_OF_BALLS);if (balls == NULL) {return -1;}for (int i = 0; i < NUM_OF_BALLS; i++) {// 随机值得区间范围int m, n;//计算圆心X的随机值x范围在【-400 + r, 400- r】m = -400 + r;n = 400 - r;balls[i].x = rand() % (n - m + 1) + m;// 计算圆心Y的随机值Y的范围在【-300 + 5 , 300-r】m = -300 + r;n = 300 - r;balls[i].y = rand() % (n - m + 1) + m;//计算小球的颜色随机值,色相范围在[0,359]之间balls[i].color = HSVtoRGB(float(rand() % 360), 0.8f, 0.9f);// 计算小球的速度大小和速度方向的随机值m = 3;n = 8;int v = rand() % (n - m + 1) + m;double theta;theta = rand() % 360;balls[i].vx = v * cos(theta * PI / 180);balls[i].vy = v * sin(theta * PI / 180);}// 通过while循环不断的重新绘制小球while (1) {// 清除一次画布cleardevice();// 绘制100个小球的代码for (int i = 0; i < NUM_OF_BALLS; i++) {setfillcolor(balls[i].color);fillcircle(balls[i].x,balls[i].y, r);}Sleep(40);// 判断小球是否碰到边界,如果时就将小球反弹回来for (int i = 0; i < NUM_OF_BALLS; i++) {if (balls[i].y >= 300 - r || balls[i].y <= -300 + r) {balls[i].vy = -balls[i].vy;}if (balls[i].x <= -400 + r || balls[i].x >= 400 - r) {balls[i].vx = -balls[i].vx;}// 移动小球的位置balls[i].x += balls[i].vx;balls[i].y += balls[i].vy;}}// 延迟响应getchar();// 关闭画布closegraph();return 0;
}

在这里插入图片描述
eg3: 批量绘图

程序在屏幕上批量显示图像

1: 程序将图像放置在显示缓存区域中

2: 显卡将显示在缓存区中的数据绘制到屏幕

eg3:单次绘图和批量绘图演示

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define PI 3.14
#define NODE_WIDTH 40
// 定义符号常量表示小球的数量
#define NUM_OF_BALLS 1000int main()
{// 创建画布initgraph(800, 600);//将坐标轴移动到中间setorigin(400, 300);// 将坐标轴的x轴和y轴反转方向setaspectratio(1, -1);setbkcolor(RGB(164, 225, 202));// 设置小球的描边颜色setlinecolor(BLACK);// 清除画布cleardevice();// 使用一个简单的案例演示批量绘图solidcircle(-300, 0, 20);Sleep(1000);solidcircle(-200, 0, 20);Sleep(1000);solidcircle(-100, 0, 20);Sleep(1000);solidcircle(0, 0, 20);Sleep(1000);solidcircle(100, 0, 20);Sleep(1000);solidcircle(200, 0, 20);Sleep(1000);solidcircle(300, 0, 20);Sleep(1000);getchar();// 关闭画布closegraph();return 0;}

在这里插入图片描述
使用代码对后面的四个圆形作为一个批次进行处理,前三个作为单次进行处理
函数BeginBatchDraw可以开启批量绘图模式,使用批量绘图后绘图操作将不会被送到显示缓存区,函数ENDBatchDraw可以结束批量绘图
在这里插入图片描述
具体代码如下所示:

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define PI 3.14
#define NODE_WIDTH 40
// 定义符号常量表示小球的数量
#define NUM_OF_BALLS 1000int main()
{// 创建画布initgraph(800, 600);//将坐标轴移动到中间setorigin(400, 300);// 将坐标轴的x轴和y轴反转方向setaspectratio(1, -1);setbkcolor(RGB(164, 225, 202));// 设置小球的描边颜色setlinecolor(BLACK);// 清除画布cleardevice();BeginBatchDraw();// 使用一个简单的案例演示批量绘图solidcircle(-300, 0, 20);Sleep(1000);solidcircle(-200, 0, 20);Sleep(1000);// 引入FlashBatchDraw函数FlushBatchDraw();solidcircle(-100, 0, 20);Sleep(1000);solidcircle(0, 0, 20);Sleep(1000);solidcircle(100, 0, 20);Sleep(1000);FlushBatchDraw();solidcircle(200, 0, 20);Sleep(1000);solidcircle(300, 0, 20);Sleep(1000);EndBatchDraw();getchar();// 关闭画布closegraph();return 0;}

在这里插入图片描述

problem:解决画面闪烁问题
通过FlushBatchDraw和EndBatchDraw与BeginBatchDraw的方式解决画面闪烁并缓解显卡压力
在这里插入图片描述

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define PI 3.14
#define NODE_WIDTH 40
// 定义符号常量表示小球的数量
#define NUM_OF_BALLS 1000
// 结构体的定义,定义每一个小球需要使用到的分量
typedef struct {// 小球圆心的x y 坐标int x;int y;// 小球x y方向上的速度分量int vx;int vy;// 小球的颜色,应该区随机值COLORREF color;
}ball;int main()
{// 创建画布initgraph(800, 600);//将坐标轴移动到中间setorigin(400, 300);// 将坐标轴的x轴和y轴反转方向setaspectratio(1, -1);setbkcolor(WHITE);// 设置小球的描边颜色setlinecolor(BLACK);// 清除画布cleardevice();/*创建结构类型的数据,编写程序的过程中要避免声明自动类型的数据,自动类型的数组数据是存放在程序的运行栈中的内存的为程序的运行栈空间较小对此可以使用malloc函数向栈中申请内存空间,栈中的空间较大可以有效的避免数组存储空间不够的问题*/// ball balls[NUM_OF_BALLS];int r = 10;ball* balls = (ball*)malloc(sizeof(ball) * NUM_OF_BALLS);if (balls == NULL) {return -1;}for (int i = 0; i < NUM_OF_BALLS; i++) {// 随机值得区间范围int m, n;//计算圆心X的随机值x范围在【-400 + r, 400- r】m = -400 + r;n = 400 - r;balls[i].x = rand() % (n - m + 1) + m;// 计算圆心Y的随机值Y的范围在【-300 + 5 , 300-r】m = -300 + r;n = 300 - r;balls[i].y = rand() % (n - m + 1) + m;//计算小球的颜色随机值,色相范围在[0,359]之间balls[i].color = HSVtoRGB(float(rand() % 360), 0.8f, 0.9f);// 计算小球的速度大小和速度方向的随机值m = 3;n = 8;int v = rand() % (n - m + 1) + m;double theta;theta = rand() % 360;balls[i].vx = v * cos(theta * PI / 180);balls[i].vy = v * sin(theta * PI / 180);}// 通过while循环不断的重新绘制小球// 解决画面闪烁问题,在绘制循环开始前调用BeginBatchDraw函数开启批量绘图BeginBatchDraw();while (1) {// 清除一次画布cleardevice();// 绘制100个小球的代码for (int i = 0; i < NUM_OF_BALLS; i++) {setfillcolor(balls[i].color);fillcircle(balls[i].x, balls[i].y, r);}// 当累积绘图达到1000个小球时,将当前累积的绘图作为一帧画面进行批量绘图FlushBatchDraw();Sleep(40);// 判断小球是否碰到边界,如果时就将小球反弹回来for (int i = 0; i < NUM_OF_BALLS; i++) {if (balls[i].y >= 300 - r || balls[i].y <= -300 + r) {balls[i].vy = -balls[i].vy;}if (balls[i].x <= -400 + r || balls[i].x >= 400 - r) {balls[i].vx = -balls[i].vx;}// 移动小球的位置balls[i].x += balls[i].vx;balls[i].y += balls[i].vy;}}// 绘制循环结束调用EenBatchDraw()函数结束批量绘图EndBatchDraw();// 延迟响应getchar();// 关闭画布closegraph();return 0;}

在这里插入图片描述

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

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

相关文章

设计融合_ c#

单例模式 using System; namespace DesignIntegration{ public class TimeManager{ private static TimeManager _instance; private static readonly Object locker new Object(); private TimeManager() { } public static TimeManager…

手机app 爬虫

近期在做某个项目,涉及到需要对手机app的进行数据爬取。在上一篇博文中,讲述了以模拟机为例的配置操作流程,这里将以苹果手机为例进行描述。 下面将讲述具体配置步骤 1、安装 抓包软件 fiddler (Fiddler | Web Debugging Proxy and Troubleshooting Solutions) ​ 下载后…

【Java】AI+智慧工地云平台源码(SaaS模式)

伴随着科学技术的不断发展&#xff0c;信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升&#xff0c;智慧工地概念应运而生&#xff0c;庞大的建设规模催生着智慧工地的探索和研发。 一、带你认识智慧工地 伴随着技术的不断发展&#xff0c;信息化手段、移动…

GZ035 5G组网与运维赛题第10套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第10套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

win10-mmgen安装/cyclegan运行问题记录

mmconda环境&#xff1a; conda&#xff1a; CUDA 11.3 conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorch pip install mmcv-full1.5.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.11.0/index.html 成功运行 c…

日常踩坑-[sass]Error: Expected newline

在学习sass的时候&#xff0c;运行时发现报错 经过网上冲浪知道&#xff0c;原来在声明语言的时候 lang 不能声明为 sass &#xff0c;而是 scss ,这就有点坑了 原因&#xff1a; scss是sass3引入进来的&#xff0c;scss语法有"{}“,”;"而sass没有&#xff0c;所以…

OSPF高级特性2(特殊区域,聚合)

目录 一、特殊区域 1、STUB区域&#xff1a; 2、totally stub区域 3、NSSA区域&#xff08;Not-So-stubby Area&#xff09; 4、totally NSSA区域 二、OSPF路由聚合 一、特殊区域 定义&#xff1a;特殊区域是指人为定义的一些区域&#xff0c;它们在逻辑中一般位于ospf区…

kubeadm部署kubernetes1.28

k8s在1.24版本以后删除了内置dockershim插件&#xff0c;原生不再支持docker运行时&#xff0c;需要使用第三方cri接口cri-docker https://github.com/Mirantis/cri-dockerd.git 安装前&#xff0c;需要先升级systemd和主机内核&#xff0c;本操作文档安装的是最新的版本kube…

前端埋点方式

前言&#xff1a; 想要了解用户在系统中所做的操作&#xff0c;从而得出用户在本系统中最常用的模块、在系统中停留的时间。对于了解用户的行为、分析用户的需求有很大的帮助&#xff0c;想实现这种需求可以通过前端埋点的方式。 埋点方式&#xff1a; 1.什么是埋点&#xff1f…

梯度下降|笔记

1.梯度下降法的原理 1.1确定一个小目标&#xff1a;预测函数 机器学习中一个常见的任务是通过学习算法&#xff0c;自动发现数据背后的规律&#xff0c;不断改进模型&#xff0c;做出预测。 上图的坐标系&#xff0c;横轴表示房子面积&#xff0c;纵轴表示房价&#xff0c;图…

对比解析php和go对JSON处理的区别

一、go 转化php数组代码 php程序 $str <<<EOF {"操作源":"任意","数据库":"任意","语句类型":"CREATE DATABASE&#xff1b;DROP DATABASE&#xff1b;ALTER DATABASE","影响行数":"不…

能力惊艳!DingoDB多模向量数据库完成首批向量数据库产品测试

近日&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;正式开展“可信数据库”首批向量数据库产品测试&#xff0c;作为向量数据库领域创新与应用的代表企业&#xff0c;九章云极DataCanvas公司自主研发的DingoDB多模向量数据库参与并顺利完成本次测评…

目标检测与图像识别分类的区别?

目标检测与图像识别分类的区别 目标检测和图像识别分类是计算机视觉领域中两个重要的任务&#xff0c;它们在处理图像数据时有一些区别。 目标检测是指在图像中定位和识别多个目标的过程。其主要目标是确定图像中每个目标的边界框位置以及对应的类别标签。目标检测任务通常涉…

串口通信(6)应用定时器中断+串口中断实现接收一串数据

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

中兴再推爆款,双2.5G网口的巡天AX3000Pro+仅需299元

10月30日消息,中兴新款路由器中兴巡天AX3000Pro将于10月31日20:00正式开售,当前可在天猫、京东及红魔商城进行预约,首发价格299元。 据了解,中兴巡天AX3000Pro是中兴智慧家庭推出的巡天系列新品,也是当前市场上唯一一款300元价位内配备双2.5G网口的路由器。 中兴巡天AX3000Pro…

【了解一下,MySQL中的三大日志binlog redolog undolog】

文章目录 MySQL中的三大日志binlog redolog undolog引言binlog简介使用场景binlog刷盘时机binlog日志格式 redo log简介redo log基本概念redo log记录形式redo log与binlog区别 一条更新语句执行过程&#xff08;含日志写入&#xff09;undo log MySQL中的三大日志binlog redol…

Redis 6.0 新功能

1-支持 ACL 1.1-ACL 简介 官网&#xff1a;https://redis.io/topics/acl Redis ACL 是访问控制列表(Access Control List)的缩写&#xff0c;该功能允许根据可以执行的命令和可以访问的键来限制某些连接。 Redis 5 版本之前&#xff0c;Redis 安全规则只有密码控制&#xf…

Java实现对Html文本的处理

1.引入jsoup <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.8.3</version> </dependency> 2. html示例 示例代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1…

【Linux】第六站:Centos系统如何安装软件?

文章目录 1.Linux安装软件的方式2.Linux的软件生态3. yum4. rzsz软件的安装与卸载5.yum如何知道去哪里下载软件&#xff1f; 1.Linux安装软件的方式 在linux中安装软件常用的有三种方式 源代码安装&#xff08;我们还需要进行编译运行后才可以&#xff0c;很麻烦&#xff09; …