小球抛物线运动

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12164369.html

一、问题描述

1、问题描述

c语言实现一个弹球游戏,实现小球在控制台的一定范围内(可自行定义范围,此博客小球的横坐标范围在(5,15),小球的纵坐标在(0,19)做抛物线运动。

二、解决问题的物理模型

2.1、没有大小的小球。

2.2、运动轨迹。

小球合运动轨迹是一个抛物线,把小球运动分解,分为水平方向运动和竖直方向运动。小球在水平方向是匀速直线运动,在竖直方向是加速度向下的变速运动。

2.3.小球的运动学方程。

小球合运动轨迹是一个抛物线,把小球运动速度分解,分为水平方向速度和竖直方向速度。小球在水平方向是匀速直线运动,水平方向速度不变;小球在竖直方向是加速度向下的变速运动,速度的运动学方程:velocity_y(竖直方向的速度)=v0(初速度)-g*t。

2.4.小球由上一位置移动到下一个位置时,速度改变。

2.5. 位移是速度在时间上的累积,速度是加速度在时间上的累积。

2.6.小球在设定的范围内运动。

三、物理模型对应的技术原型

3.1 在指定位置显示小球。

3.1.1 原理(包含公式)

以字母o代表小球。

3.1.2 函数

void Show(int x,int y);

函数作用:在控制台打印输出小球每次移动的位置

Ø  函数参数说明:

参数名1:x

参数类型:int

参数意义:小球在控制台位置的纵坐标(竖直方向)

参数名2:y

参数类型:int

参数意义:小球在控制台位置的横坐标(水平方向)

Ø  返回值说明:

返回值类型:void

3.1.3 举例说明/解释函数实现的功能

   使用双重for循环,以换行为x竖直方向,空格为y水平方向。例如当x=5,y=6时,会在(5,6)位置显示一个小球o。

3.2 一段时间后,小球的新位置计算

3.2.1 原理(2.5节物理模型对应的代码模型,以及时间在代码中如何实现)

循环每执行一次,小球的新纵坐标y=y(小球上一次移动后的纵坐标)+delta(y)( delta(y)代表y的增量),横坐标x=0.1*(y-20)*y+15。

3.2.2 函数

Adrress  Getnext_y(struct Adrress A,int y)

结构体Adrress定义:

struct Adrress
{
    int x;//小球竖直方向坐标
    int y;//小球水平方向坐标
};

函数作用:根据小球上一次横纵坐标的位置,得到小球新的横纵坐标位置

Ø  函数参数说明:

 参数名1:A

 参数类型:struct Adrress

 参数意义:保存小球新的横纵坐标位置

 

参数名2:y

参数类型:int

参数意义:小球在控制台上一次位置的横坐标(水平方向)

Ø  返回值说明:

返回值类型:Address

3.2.3 举例说明/解释函数实现的功能

    小球从初始坐标x=13,y=1开始移动,每次执行Getnext_y(struct Adrress A,int y)函数,y都加上y方向位移,x=f(y),然后用新得到的x,y更新结构体中的A.x和A.y。检测小球x是否等于15的边界条件,如果小球坐标满足x=15,小球重新从x=13,y=1位置按照上述规则开始移动。

3.3 小球的移动

3.3.1 原理

视觉暂留原理:人眼在观察景物时,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。

3.3.2 函数

   在main() 中调用了system("cls") ;

Adrress  Getnext_y(struct Adrress A,int y);

void Show(int x,int y);

3.3.3 举例说明/解释函数实现的功能

使用system("cls") 清除显示过的小球。我们看到小球消失后,虽然小球消失了,但是小球影像还存在于我们大脑中,把消失的小球坐标y传入Adrress  Getnext_y(struct Adrress A,int y);函数中,得到新小球x,y的坐标,使用void Show(int x,int y)函数,新小球会在新的位置再次显示,我们脑中的小球影像会和看到的新小球有一个连接,这让我们感觉小球像是在移动。

3.4、小球在设定的范围内运动的技术原型

3.4.1 函数

bool Isrepeat (int x)

函数作用:对小球运动界定范围。

Ø  函数参数说明:

参数名:x

参数类型:int

参数意义:小球在控制台上位置的纵坐标(竖直方向)

Ø  返回值说明:

返回值类型:bool

3.4.2举例说明/解释函数实现的功能

小球坐标每改变一次,都在Adrress  Getnext_y(struct Adrress A,int y)中判断Isrepeat (int x)函数是否为当小球坐标到达x=15时,Isrepeat (int x)函数为真,使小球从初始位置x=13,y=1重新开始运动。

四、运行结果

代码git地址: https://e.coding.net/SpringSun/Ball_parabolic.git

致谢

      感谢小霞师姐前期搭建此博客的目录草稿以及后期对此博客链接的建议,感谢彩虹师兄前期对此博客内容的指导以及后期代码的指导,感谢佑蓉师姐对此博客内容,代码以及排版的指导,感谢位军营对此博客代码的指导,感谢华哥对此博客后期出现bug的指导,感谢老师对此博客的全程指导和建议,感谢河海大学童老师的课程。

原文地址:https://www.cnblogs.com/ping2yingshi/p/12164369.html