用C语言实现牛顿摆控制台动画

题目

用C语言实现牛顿摆动画,模拟小球的运动,如图所示

用C语言实现牛顿摆动画

用C语言实现牛顿摆动画
用C语言实现牛顿摆动画

拆解

  1. 通过控制台API定位输出小球
  2. 运动的只是2边小球,中间小球不运动,只需要固定位置输出
  3. 左边小球上升下降时,X、Y轴增量一致。
  4. 右边小球上升下降时,X、Y轴增量相反。

代码

#include <stdbool.h> // bool类型头文件
#include <stdio.h>
#include <windows.h>
#include <conio.h>#define CONSOLEWIDTH 80  // 控制台宽度
#define CONSOLEHEIGHT 40 // 控制台高度// 坐标结构
typedef struct _point
{short X;short Y;
} Point;// 控制台相关/// @brief  设置光标位置,起点从1开始
/// @param nCols 列
/// @param nRows 行
void MoveCursorTo(int nCols, int nRows)
{COORD crdLocation = {nCols, nRows};HANDLE HOutput = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出的句柄SetConsoleCursorPosition(HOutput, crdLocation);   // 设置光标位置
}/// @brief  设置控制台大小
/// @param uCol 列
/// @param nRows 行
void SetConsoleSize(unsigned uCol, unsigned nRows)
{char cmd[64];sprintf(cmd, "mode con cols=%d lines=%d", uCol, nRows);system(cmd);
}//#define NODECOUNT 6 // 小球数量
#define STARTNUM 4  // 小球大小/// @brief 绘制小球
/// @param pos 小球位置
void printNode(Point pos)
{int i;MoveCursorTo(pos.X, pos.Y);for (i = 0; i < STARTNUM; i++)printf("*");MoveCursorTo(pos.X, pos.Y + 1);printf("*");for (i = 0; i < STARTNUM - 2; i++)printf(" ");printf("*");MoveCursorTo(pos.X, pos.Y + 2);for (i = 0; i < STARTNUM; i++)printf("*");
}/// @brief 绘制中间不动的小球
/// @param pos 绘制位置
void printMid(Point pos)
{for (int i = 0; i < NODECOUNT - 1; i++){printNode(pos);pos.X += STARTNUM + 1;}
}int main()
{SetConsoleSize(CONSOLEWIDTH, CONSOLEHEIGHT); // 设置控制台大小Point lpos, rpos, orign;bool isLeft = true; // 左球标记orign.X = (CONSOLEWIDTH - STARTNUM * NODECOUNT) / 2; // 居中输出orign.Y = (CONSOLEHEIGHT - 5) / 2;int step = 5; // 运动步数int l = 0, r = 0, flag = 1;lpos = rpos = orign;lpos.X -= (STARTNUM + 1) + step; // 左球起始定位lpos.Y -= step;rpos.X += (STARTNUM + 1) * (NODECOUNT - 2); // 右球起始定位while (true){if (_kbhit()) // 按任意键退出break;system("cls");if (isLeft){ // 左球运动lpos.X += flag;lpos.Y += flag;printNode(lpos); // 绘制小球printMid(orign); // 绘制中间不动的小球l += flag;if (l == step) // 左球碰撞{isLeft = false;flag = -1; // 标记右球起始运动}if (l == 0) // 左球到达顶点flag = 1;}else{                    // 右球运动rpos.X += -flag; // 右球运动时X与Y增量相反rpos.Y += flag;printNode(rpos);printMid(lpos);r += -flag;if (r == step) // 右球到达顶点flag = 1;if (r == 0) // 右球碰撞{isLeft = true;flag = -1;}}Sleep(300); // 运动速度,数字越小越快}return 0;
}

运行结果

用C语言实现牛顿摆动画

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

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

相关文章

了解静电消除器离子风嘴的作用

离子风嘴在工业用途中很广泛。属于用压缩气系列的除静电的一种设备。具有安装简单、性能稳定、风速强劲、除静电迅速的特点。 离子风嘴可以产生许多的带着有正电荷负电荷的气体&#xff0c;被压缩气吹出&#xff0c;可以把设备上带的电荷中和掉。当设备表面上带有的电荷为负电荷…

索尼 toio™ 应用创意开发征文 | 如何用Python控制Q宝进行机器人擂台赛

你是否曾经想过&#xff0c;如果能用编程来控制真实的物体&#xff0c;那该有多有趣&#xff1f;如果能让一个小方块按照你的指令来移动、旋转、闪烁&#xff0c;那该有多酷&#xff1f;如果能让一个小方块和其他小方块互动&#xff0c;那该有多神奇&#xff1f;这些想法&#…

软件测试/测试开发丨跨平台 api 对接 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27139 跨平台 api 对接 测试平台需求 稳定 功能 调用脚本报告获取分布式支持 API 调用 开源 Jenkins 环境准备 Jenkins 满足所有调度平台的需求 需…

MindFusion.Diagramming for ASP.NET MVC 4.2 Crack

ASP.NET MVC 4.2 的 MindFusion.Diagramming 添加对多个图表页面和选项卡式图表视图的支持。 2023 年 9 月 8 日 - 16:57新版本 特征 多个图表页面-添加了DiagramDocument 类&#xff0c;它表示图表页面或工作表的集合。 可以将新页面添加到文档中&#xff0c;并且可以删除或重…

容器编排学习(一)容器技术

一 容器 1 Linux 容器的起源 容器的起源可以追溯到1979年 UNIX 系统中提供的chroot命令&#xff0c;容器的最初的设计目标是为了隔离计算机中的各类资源以便降低软件开发、测试阶段的风险&#xff0c;或者充当蜜罐&#xff0c;吸引黑客的攻击&#xff0c;以便监视黑客的行为…

Logstash--logstash-syslog-putput插件安装及使用

这篇文章讲的是如何在Linux服务器上安装logstash-syslog-output插件及使用&#xff0c;是集网上之大成&#xff0c;择选出一条正确有效简短的路。 安装 插件logstash-syslog-output&#xff0c;如果你的logstash没有&#xff0c;则需要安装。 查看logstash是否含有这个插件的…

二分搜索树节点的查找(Java 实例代码)

目录 二分搜索树节点的查找 Java 实例代码 src/runoob/binary/BinarySearchTreeSearch.java 文件代码&#xff1a; 二分搜索树节点的查找 二分搜索树没有下标, 所以针对二分搜索树的查找操作, 这里定义一个 contain 方法, 判断二分搜索树是否包含某个元素, 返回一个布尔型变…

SpringMVC之CRUD------增删改查

目录 前言 配置文件 pom.xml文件 web.xml文件 spring-context.xml spring-mvc.xml spring-MyBatis.xml jdbc.properties数据库配置文件 generatorConfig.xml log4j2日志文件 后台 PageBaen.java PageTag.java 切面类 biz层 定义一个接口 再写一个实现类 …

C++设计模式_03_模板方法Template Method

文章目录 1. 设计模式分类1.1 GOF-23 模式分类1.2 从封装变化角度对模式分类 2. 重构&#xff08;使用模式的方法&#xff09;2.1 重构获得模式 Refactoring to Patterns2.2 重构关键技法 3. “组件协作”模式4. Template Method 模式4.1 动机&#xff08; Motivation&#xff…

【Linux从入门到精通】通信 | 共享内存(System V)

本篇文章接着上篇文章通信 | 管道通信&#xff08;匿名管道 & 命名管道&#xff09;进行讲解。本篇文章的中点内容是共享内存。 文章目录 一、初识与创建共享内存 1、1 什么是共享内存 1、2 共享内存函数 1、2、1 创建共享内存 shmget 1、2、2 ftok 生成 key 1、2、3 获取共…

YOLO目标检测——红火蚂蚁识别数据集+已标注yolo格式标签下载分享

实际项目应用&#xff1a;目标检测红火蚂蚁识别数据集在农业、生态学、环境保护、城市管理和学术研究等领域都有着广泛的应用。通过准确识别和定位红火蚂蚁&#xff0c;可以帮助我们更好地了解和管理这一入侵物种&#xff0c;从而减少其对环境和经济的负面影响。数据集说明&…

一文看懂微信小程序新版隐私协议(附带弹窗组件)

一、前言 微信小程序近期又迎来了一次改革–9月15日之后如果小程序涉及调用微信的隐私接口获取用户的信息的&#xff0c;需要用户手动同意协议后才可正常调用接口&#xff0c;否则会返回报错信息。 隐私接口目前常用的有&#xff1a;手机号快捷获取、读取照片、获取用户的头像…

【爬虫】实验项目三:验证码处理与识别

目录 一、实验目的 二、实验预习提示 三、实验内容 实验要求 基本要求&#xff1a; 改进要求A&#xff1a; 改进要求B&#xff1a; 四、实验过程 基本要求 五、源码如下 六、资料 一、实验目的 部分网站可能会使用验证机制来阻止用户无效登录或者是验证用户不是用程…

自己设计CPU学习之路——基于《Xilinx FPGA应用开发》

1. 一个32组位宽为32的寄存器堆 框图 代码 regfile.h ifndef __FEGFILE_HEADER__define __REGFILE_HEADER__define HIGH 1b1define LOW 1b0define ENABLE_ 1b0define DISABLE_ 1b1define DATA_W 32define DataBus 31:0define DATA_D 32d…

socket编程

网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。一般系统网络协议包括五个部分&#xff1a;通信环境&#xff0c;传输服务&#xff0c;词汇表&#xff0c;信息的编码格式&#xff0c;时序、规则和过程。 Socket是应用层和TIP/IP协议簇通…

Middleware ❀ Kafka功能与使用详解

文章目录 1. 概述1.1. 消息队列1.2. 应用场景1.3. 工作模式1.4. 基础结构1.4.1. 结构组件1.4.2. 数据同步1.4.3. ACK机制1.4.4. 分区机制1.4.4.1. 使用Partition Key写入1.4.4.2. 轮询写入 - 默认规则1.4.4.3. 指定Partition写入 1.4.5. Offset偏移量1.4.5.1. 消息顺序性1.4.5.…

linux系统中驱动框架基本分析

大家好&#xff0c;今天分享一篇Linux驱动软件设计思想的文章。由于文章较长&#xff0c;可以先收藏后再慢慢看。 一、Linux驱动的软件架构 1.1 出发点 为适应多种体系架构的硬件&#xff0c;增强系统的可重用和跨平台能力。 1.2 分离思想 为达到一个驱动最好一行都不改就…

Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃

目前在大数据生态中&#xff0c;调度系统是不可或缺的一个重要组件。Apache DolphinScheduler 作为一个顶级的 Apache 项目&#xff0c;其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说&#xff0c;能够支持的可调度的任务类型同样是一个非常重要的因素&#xf…

国内访问香港服务器选择什么路线?

​  国内访问香港服务器可以选择多种路线。首先&#xff0c;我们了解下各个线路的速度延迟。 一、CN2直连&#xff1a;解决了不同互联网服务提供商之间访问的难题&#xff0c;不需要绕到国际网络再从中国的三个网络入口进入。 二、优化直连&#xff1a;全国平均延迟60ms&…

Ubuntu----Linux命令-----防火墙(查看、关闭、启动)

一、查看防火墙状态 命令&#xff1a;ufw status 说明&#xff1a; 活动&#xff1a;防火墙是开启的 不活动&#xff1a;防火墙是关闭的 二、开启防火墙 命令&#xff1a;sudo ufw enable 开启防火墙后&#xff0c;可以查看防火墙状态 三、关闭防火墙 命令&#xff1a;sud…