EASYX动画效果实现

eg1:绘制小球的动画效果

  • 通过一下的代码实现小球从左向右移动效果,计算小球的移动速度和帧率实现移动效果平和造成视觉上的错觉
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 绘制出圆在每一个时刻的静态画面
    int x = 0;
    int y = 0;
    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        solidcircle(x, y, 50);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;
}

eg2:实现五角星往返运动

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

// 绘制五角星的函数,参数radius表示的是五角星外切圆的半径,参数startAngle是五角星的起始角度x, y 表示移动五角星的坐标
void fivePointedStar(int x,int y ,int radius, double startAngle) {
    double delta = 2 * PI / 5;
    POINT points[5];
    // 循环5次
    for (int i = 0; i < 5; i++) {
        // 使用三角函数计算出如何绘画五角星和五角星绘画的位置
        points[i].x = cos(startAngle + i * delta * 2) * radius + x;
        points[i].y = sin(startAngle + i * delta * 2) * radius + y;
    }
    solidpolygon(points, 5);
}

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 指定多边形的填充模式为winding
    setpolyfillmode(WINDING);
    // 绘制出圆在每一个时刻的静态画面
    int x = 0;
    int y = 0;
    int dx = 5;
    while (1) {
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        Sleep(40);

        x = x + dx;
        if (x == -400 || x == 400) {
            dx = -dx;
        }
    }
    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;

}

在这里插入图片描述
eg3:实现五角星实现矩形运动

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

// 绘制五角星的函数,参数radius表示的是五角星外切圆的半径,参数startAngle是五角星的起始角度x, y 表示移动五角星的坐标
void fivePointedStar(int x,int y ,int radius, double startAngle) {
    double delta = 2 * PI / 5;
    POINT points[5];
    // 循环5次
    for (int i = 0; i < 5; i++) {
        // 使用三角函数计算出如何绘画五角星和五角星绘画的位置
        points[i].x = cos(startAngle + i * delta * 2) * radius + x;
        points[i].y = sin(startAngle + i * delta * 2) * radius + y;
    }
    solidpolygon(points, 5);
}

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 指定多边形的填充模式为winding
    setpolyfillmode(WINDING);
    int x = -300;
    int y = 200;
    int dx, dy;
    while (1) {
        if (x == -300 && y == 200) {
            dx = 5;
            dy = 0;
        }
        else if (x == 300 && y == 200) {
            dx = 0;
            dy = -5;
        }
        else if (x == 300 && y == -200) {
            dx = -5;
            dy = 0;
        }
        else if (x == -300 && y == -200) {
            dx = 0;
            dy = 5;
        }
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
        x = x + dx;
        y = y + dy;
    }
     

    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;

}

在这里插入图片描述
eg4:让五角星实现圆周运动
在这里插入图片描述

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

// 绘制五角星的函数,参数radius表示的是五角星外切圆的半径,参数startAngle是五角星的起始角度x, y 表示移动五角星的坐标
void fivePointedStar(int x,int y ,int radius, double startAngle) {
    double delta = 2 * PI / 5;
    POINT points[5];
    // 循环5次
    for (int i = 0; i < 5; i++) {
        // 使用三角函数计算出如何绘画五角星和五角星绘画的位置
        points[i].x = cos(startAngle + i * delta * 2) * radius + x;
        points[i].y = sin(startAngle + i * delta * 2) * radius + y;
    }
    solidpolygon(points, 5);
}

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 指定多边形的填充模式为winding
    setpolyfillmode(WINDING);
    int x, y;
    int r = 200;
    double theta = 0;
    double dTheta = 0.05;
    while (1) {
        x = cos(theta) * r;
        y = sin(theta) * r;
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
        theta = theta + dTheta;
    }
     

    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;

}

在这里插入图片描述
eg5:实现动画的自传移动效果

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

// 绘制五角星的函数,参数radius表示的是五角星外切圆的半径,参数startAngle是五角星的起始角度x, y 表示移动五角星的坐标
void fivePointedStar(int x,int y ,int radius, double startAngle) {
    double delta = 2 * PI / 5;
    POINT points[5];
    // 循环5次
    for (int i = 0; i < 5; i++) {
        // 使用三角函数计算出如何绘画五角星和五角星绘画的位置
        points[i].x = cos(startAngle + i * delta * 2) * radius + x;
        points[i].y = sin(startAngle + i * delta * 2) * radius + y;
    }
    solidpolygon(points, 5);
}

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 指定多边形的填充模式为winding
    setpolyfillmode(WINDING);
    int x, y;
    int r = 200;

    double theta = 0;
    double dTheta = 0.05;
    
    double startAngle = PI / 2;
    double dStartAngle = 0.05;
    while (1) {
    
        x = cos(theta) * r;
        y = sin(theta) * r;
    
        cleardevice();
        fivePointedStar(x, y, 50, startAngle);
        Sleep(40);
    
        theta = theta + dTheta;
        startAngle = startAngle + dStartAngle;
    }
     
    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;

}

在这里插入图片描述eg6:EASYX实现直线运动

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <conio.h>
#define PI 3.14
// 函数的封装,前两个参数为起始点xy的坐标, 中间的两个参数为终止点的xy坐标,最后的一个参数为速度的大小单位为px没帧
void LinearMotion(int x1, int y1, int x2, int y2, int v) {
    // 使用tan 和arctan计算出角度
    double tanTheta = (double)abs(y2 - y1) / (double)abs(x2 - x1);
    double theta = atan(tanTheta);
    // 使用三角函数计算出速度分量vx和vy
    double vy = sin(theta) * v;
    double vx = cos(theta) * v;
    // 根据速度方向的正负求得速度分量的符号用变量vxFlag和变量vyFlag进行保存
    int vxFlag = 0;
    int vyFlag = 0;
    if (x2 - x1 > 0) {
        vxFlag = 1;
    }
    else if (x2 - x1 < 0) {
        vxFlag = -1;
    }if (y2 - y1 > 0) {
        vyFlag = 1;
    }
    else if (y2 - y1 < 0) {
        vyFlag = -1;
    }
    vx = vx * vxFlag;
    vy = vy * vyFlag;
    // 圆心的坐标
    double x, y;
    x = x1;
    y = y1;
    while (1) {
        cleardevice();
        solidcircle(x, y, 25);
        Sleep(40);
        x += vx;
        y += vy;
        if (vxFlag == 1) {
            if (x >= x2) {
                break;
            }
        }
        else if (vxFlag == -1) {
            if (x <= x2) {
                break;
            }
        }if (vyFlag == 1) {
            if (y >= y2) {
                break;
            }
        }
        else if (vyFlag == -1) {
            if (y <= y2) {
                break;
            }
        }

    }

}



int main()
{
    // EASYX实现直线运动
    initgraph(800, 600);
    setorigin(400, 300);
    setaspectratio(1, -1);
    setbkcolor(RGB(164, 225, 202));
    cleardevice();
    

    //函数调用
    LinearMotion(-200, -200, 0, 200, 5);
    LinearMotion(-0, 200, 200, -200, 5);


    getchar();
    closegraph();
    return 0;


}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android JNI/NDK 入门从一到二

1. 前言 最基础的创建JNI接口的操作&#xff0c;可以直接看这篇文章 : 第一个Android JNI工程&#xff0c; 本文会基于掌握创建JNI接口的操作的基础之上&#xff0c;来入门JNI/NDK。 2. 在JNI中打印日志 2.1 添加log模块 记得CMake中有log模块&#xff0c;不然编译不过 ta…

大模型之十九-对话机器人

大语言模型的最早应用是Chatbot&#xff0c;其实我最早接触语义理解在2014年&#xff0c;2014年做智能音箱的时候&#xff0c;那时也是国内第一批做智能音箱的&#xff0c;在现在看起来当时的智能音箱比较傻&#xff0c;很多问题无法回答&#xff0c;长下文效果也不好&#xff…

etcd的mvcc源码剖析

mvcc简介 悲观锁 在对于一些临界资源进行读写的时候&#xff0c;为了防止其他人进行同步的修改数据&#xff0c;直接将当前的数据锁住&#xff0c;不让别人使用&#xff0c;来实现并发安全 乐观锁 在对临界资源进行操作的时候&#xff0c;不锁住数据&#xff0c;实现独占&…

网络协议--TCP的交互数据流

19.1 引言 前一章我们介绍了TCP连接的建立与释放&#xff0c;现在来介绍使用TCP进行数据传输的有关问题。 一些有关TCP通信量的研究如[Caceres et al. 1991]发现&#xff0c;如果按照分组数量计算&#xff0c;约有一半的TCP报文段包含成块数据&#xff08;如FTP、电子邮件和U…

Elasticsearch跨集群检索配置

跨集群检索字面意思&#xff0c;同一个检索语句&#xff0c;可以检索到多个ES集群中的数据&#xff0c;ES集群默认是支持跨集群检索的&#xff0c;只需要动态的增加入节点即可&#xff0c;下面跟我一起来体验下ES的跨集群检索的魅力。 Elasticsearch 跨集群检索推荐的是不同集群…

linux中nginx配置https

一、版本适配 版本一定要适配&#xff0c;否则会报错各种参数定位不到不识别的错误&#xff0c;以下是版本适配信息&#xff0c;各位观客自行按照以下信息匹配版本。 Nginx 1.11.5及以上版本与OpenSSL 1.0.2及以上版本兼容。Nginx 1.15.2及以上版本与OpenSSL 1.1.1及以上版本兼…

redis的bitmap(面试题,待补充)

位图简介 如果我们需要记录某一用户在一年中每天是否有登录我们的系统这一需求该如何完成呢&#xff1f;如果使用KV存储&#xff0c;每个用户需要记录365个&#xff0c;当用户量上亿时&#xff0c;这所需要的存储空间是惊人的。 Redis 为我们提供了位图这一数据结构&#xff…

图神经网络及其在知识图谱的应用

一 应用领域 道路交通&#xff0c;动态预测 自动驾驶&#xff0c;无人机场景 化学&#xff0c;医疗等场景 物理模型相关 二 图基本模块定义 V Vertex点 E Edge 边&#xff08;向量&#xff09; U Global 图 &#xff08;例如&#xff1a;全局向量&#xff09; 无论事…

msigdbr hallmarks gsea broad研究所

使用msigdbr r包 #BiocManager::install("msigdb") #https://www.gsea-msigdb.org/gsea/msigdb #https://cran.r-project.org/web/packages/msigdbr/vignettes/msigdbr-intro.html #https://bioconductor.org/packages/release/data/experiment/vignettes/msigdb/ins…

RPC远程调用加密方法获取返回值

前言 从混淆的加密JS中还原了加密参数的具体生成流程&#xff0c;结果想从JS转python的过程中第一步就卡住了。开头密钥JS代码如下&#xff0c;但是水平有限不知道如何转为python实现(如果有大佬知道希望可以评论指点)。利用execjsjsdom来执行简化还原后的JS代码依旧无法实现。…

MGRE环境下的OSPF

实验拓扑 需求 1 R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2 R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c;R1为中心站点 3 所有私有网段可以互相通讯&#xff0c;私有网段使用OSPF完成。 IP规划 配置IP R1 # interface GigabitEt…

Flutter FittedBox

&#x1f525; 英文单词FittedBox &#x1f525; Fitted 通过有道翻译如下 &#xff1a; Box 通过有道翻译如下 &#xff1a; 对 FittedBox 的理解 我们可以将 FittedBox 理解为合适的盒子&#xff0c;将其它布局放到FittedBox这样一个盒子中&#xff0c;从而实现 盒子里面的…

C++ list 的使用

目录 1. 构造函数 1.1 list () 1.2 list (size_t n, const T& val T()) 1.3 list (InputIterator first, InputIterator last) 2. bool empty() const 3. size_type size() const 4. T& front() 4. T& back() 5. void push_front (const T& val) 6.…

Elasticsearch核心技术与实战-05-elasticsearch的安装与简单配置-Windows

首先下载elasticsearch的zip包&#xff1a;下载地址 网络不通的解决方法&#xff1a;国内镜像站 es、kibana、logstash均可在华为云开元镜像站自行选择版本下载&#xff1a;下载地址 下载插件包&#xff1a; .\bin\elasticsearch-plugin install analysis-icu .\bin\elasti…

pgbackrest归档目录满,清理后写入仍报错,分析及处理

一、 背景 pgbackrest配置的归档目录/backup被写满 归档报错 No space left on device&#xff0c;wal日志堆积 解决方法直接查看第三部分 二、 问题分析及处理 1. 目录清理 首先想到的就是清理/backup目录&#xff0c;清理后剩余6T空间 但发现pgbackrest归档依旧在报错 No …

dc-5 靶机

1.扫描ip地址 2.网页 3.dirb 爆破目录 没有用 4.爆破端口 没有用 5. 文件上传漏洞 上传点 写一句话木马 蚁剑连接 1.shell反弹 蚁剑反弹 提权 使用命令 命令"find / -perm -us -type f 2>/dev/null"在整个文件系统 ("/") 中搜索设置了SUID权…

基于白鲸优化算法BWO优化的VMD-KELM光伏发电短期功率预测MATLAB代码(含详细算法介绍)

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; VMD适用于处理非线性和非平稳信号&#xff0c;例如振动信号、生物信号、地震信号、图像信号等。它在信号处理、振动分析、图像处理等领域有广泛的应用&#xff0c;特别是在提取信号中的隐含信息和去除噪声方面…

Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED

Capacitor 打包 h5 到 Android 应用&#xff0c;uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED capacitor 官网&#xff1a; https://capacitorjs.com/docs/ 项目上需要做一个 app&#xff0c;而这个 app 是用 uniapp 做的&#xff0c;里面用到了一个依赖 dom 的库&…

【Mysql】数据库三大范式

数据库三范式 &#xff1a;数据库三范式是指关系型数据库设计中的三种规范化设计原则&#xff0c;旨在减少数据冗余、提高数据一致性和可维护性。 第一范式&#xff1a;规定表中的每一列都应该是不可分割的最小单元。 为什么要这样实现呢&#xff1f; &#xff1a;举个栗子…

Kotlin(八) 数据类、单例

目录 一&#xff1a;创建数据类 二&#xff1a;单例类 一&#xff1a;创建数据类 和Java的不同&#xff0c;kotlin的数据类比较简单&#xff0c;New→Kotlin File/Class&#xff0c;在弹出的对话框中输入“Book”&#xff0c;创建类型选择“Data”。如图&#xff1a; 然后编…