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.hqwc.cn/news/157267.html

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

相关文章

vs2013/2015/2019扩展-联机提示“未能建立到服务器的连接“/“基础连接已经关闭: 发送时发生错误“/“远程主机强迫关闭了一个现有的连接“

VS2013\VS2015 输入命令 [Net.ServicePointManager]::SecurityProtocol[Net.ServicePointManager]::SecurityProtocol-bOR [Net.SecurityProtocolType]::Tls12 采用上述方法偶尔可以有效&#xff0c;重新启动VS就没用了 VS2019 怎么样都不行 最终解决办法&#xff1a;换一…

React native window工程在macbook中打包运行环境搭建实录

做了个安卓的app&#xff0c;打算试试打包ios。但是mac中遇到许多挑战。在这记录下。 刚开始就是按照文档的操作的&#xff0c; 实际上这里Watchman 不是必须的&#xff0c; 这是监听文件变化然后自动同步更新模拟器效果的&#xff0c;完全可以修改后自己重新打包看效果&#…

(01)Mycat说明与介绍

1、Mycat是什么 Mycat是一个数据库中间件&#xff0c;前身是阿里的cobar。 2、Mycat可以用来做什么 1.读写分离 2.数据分片 &#xff08;1&#xff09;垂直拆分 &#xff08;2&#xff09;水平拆分 &#xff08;3&#xff09;垂直水平拆分 3.多数据源整合 3、Mycat实现的…

2、NLP文本预处理技术:词干提取和词形还原

一、说明 在上一篇文章中&#xff0c;我们解释了文本预处理的重要性&#xff0c;并解释了一些文本预处理技术。在本文中&#xff0c;我们将介绍词干提取和词形还原主题。 词干提取和词形还原是两种文本预处理技术&#xff0c;用于将单词还原为其基本形式或词根形式。这些技术的…

创建ABAP数据库表和ABAP字典对象-理解表字段02

理解表字段 这一步&#xff0c;您将定义表字段。首先&#xff0c;你需要了解你的需求: 内置的ABAP类型和新定义的字段类型 下面我们将会创建3个字段类型在数据库表中。 ●内置字段类型&#xff1a;最快的方法:应用系统已经提供好的字段类型&#xff0c;基本类型、长度和描述…

软件无线电处理平台解决方案:330-基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口卡

基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口卡 一、板卡概述 本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片&#xff0c;pin_to_pin兼容FPGAXC7K410T-2FFG900 &#xff0c;支持PCIeX8、64bit DDR3容量2GByte&#xff0c;HPC的FMC连接器&#xff0c;北京太速科…

opencv复习(很乱)

2-高斯与中值滤波_哔哩哔哩_bilibili 1、均值滤波 2、高斯滤波 3、中值滤波 4、腐蚀操作 卷积核不都是255就腐蚀掉 5、膨胀操作 6、开运算 先腐蚀再膨胀 7、闭运算 先膨胀再腐蚀 8、礼帽 原始数据-开运算结果 9、黑帽 闭运算结果-原始数据 10、Sobel算子 左-右&#x…

地图坐标展示工具folium

参考&#xff1a;https://github.com/python-visualization/folium https://zhuanlan.zhihu.com/p/384078185?utm_id0 https://www.w3cschool.cn/article/37568875.html 其他还有baidu&#xff1a;echarts 安装&#xff1a; pip install folium代码&#xff08;离线地图&a…

美术如何创建 skybox 贴图资源?

文章目录 目的PS手绘Panorama To CubemapPS手绘Pano2VRSkybox & Cubemap Tutorial (Maya & Photoshop)Unity 中使用 ReflectionProbe 生成 Cubemap 然后再 PS 调整PS直接手绘 cubemapBlender 导入 Panorama&#xff0c;然后烘焙到 cubemap&#xff0c;再导入unity中使用…

利用Nginx负载均衡、动静分离特性部署前后端项目

目录 一、Nginx简介 1.1 Nginx是什么&#xff1f; 1.2 Nginx的作用 二、Nginx负载均衡 2.1 Nginx安装 2.2 Nginx搭载负载均衡 2.2.1 tomcat负载均衡 2.2.2 服务器的集群 三、前后端分离项目 3.1 前端项目导出 3.2 前端项目Linux部署 一、Nginx简介 1.1 Nginx是什么…

CSS3背景样式

在CSS 2.1中&#xff0c;background属性的功能还无法满足设计的需求&#xff0c;为了方便设计师更灵活地设计需要的网页效果&#xff0c;CSS3在原有background基础上新增了一些功能属性&#xff0c;可以在同一个对象内叠加多个背景图像&#xff0c;可以改变背景图像的大小尺寸&…

MATLAB | 万圣节来画个简单的可爱鬼叭!

万圣节要到啦一起来画个可爱鬼吧~ 代码比较的短&#xff1a; 完整代码 figure(Units,normalized,Position,[.2,.1,.52,.72]); axgca;hold on;axis off; ax.DataAspectRatio[1,1,1]; ax.YDirreverse; ax.XLim[0,100]; ax.YLim[0,100]; [X,Y]meshgrid(linspace(0,1,200)); Zsq…