一、博客作业
1.对冰球桌环境仿真模块的思路
前言:一开始看到这个作业我是完全没有思路的,直至我打开了我的IPHONE手机,发现苹果虚设的HOME键-Assistive Touch,它能随我的手指移动而移动,于是我将其与冰球桌的击球器联系在一起。
①击球器的控制
由前言可知,实现一个击球器的控制,需要先能实现一个圆(击球器)能随手指移动,这一软件模块主要技术点在于View的应用、触摸事件处理等(由于本人编程语言技术实在太差。。只能翻阅资料查找相关的知识点。。)
②位置的控制
由于是二维的环境,可在边界交点处设立一个原点,那么击球器和冰球的位置皆可用F(x,y)来确定,即设计一个变量记录击球器和冰球的位置。
③击球过程
由于有俩个变量实时记录着击球器和冰球的位置情况,在未设定好击球器的半径和冰球的半径下,当俩个变量相等时,设定一个Impact=ture,触发击球器和冰球有一个“碰撞”的效果(即碰撞函数),“碰撞”后才能使得冰球产生一个速度矢量。根据现实中两球相碰的物理情况,冰球总是会沿直线运动,因此为了实现这一个过程,需要用一个主函数来显示冰球,速度的确定,可以用动量守恒定律,在每次碰撞的瞬间,应使得击球器在一瞬间静止,将冰球的速度(标量)完全返回给冰球,且方向相反,使得冰球沿一个直线轨迹运动。
④约束
在边界处也设定一个IMPACT,当IPMACT=TURE时,触发冰球函数的碰撞函数
二、编程作业
struct BALL_parameter{ //冰球的运动参数
double Position_BALL; //位置 double Velocity_BALL; //速度};struct BALL_state{ //冰球的状态
bool Request; //是否接受指指令 bool Done; //是否已完成运动指令 bool Impact; //是否接受碰撞的指令};
struct impact{ //碰撞指令 double Position; double Velocity;};class BALL
{public:
BALL_state State; //定义数据成员冰球的状态 BALL_parameter Parameter; //定义数据成员冰球运动参数 impact Impact; //定义数据成员碰撞指令 void SET_BALL(BALL_state, BALL_parameter, impact); //冰球初始化函数 int path_line(); //冰球的运动轨迹 int Imapct_Line(); //冰球碰撞的运动轨迹 BALL_state Get_state(); //返回冰球对象的状态 BALL_parameter Get_parameter(); //返回冰球对象的参数 impact Get_impact(); //返回冰球对象的接受命令参数 void take_order(); //执行命令,并及时更新冰球状态};