



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一次上机报告 模拟台球运动上机目的:1.复习c+语言,复习一般类的定义与实现,模板类的定义与实现,类的继承;2.学习顺序表的数据结构,构造顺序表来模拟台球的运动;3.学习规划整个程序使之正确、可读性强、功能丰富;4.学习文件之间的连接与嵌套;5.学习文件输入输出操作。物理模型:初始参数:#define MAX 100/链表中最大球数#define dt 0.001/时间间隔#define MAXDISTANCE 0.3/球的相互作用有效距离#define BALL_RADIUS 0.1/球的半径#define HOLE_RADIUS 0.2/洞的半径#define WIDTH 2.0/球桌宽#define LENGTH 3.0/球桌长#define MASS 1.0/球的质量球桌规格为LENGTHMASS,设置6个角袋,形状为4个四分之一圆与2个半圆,半径为HOLE_RADIUS,如图所示,以球桌中心为原点建立平面直角坐标系。初始化:36个编号为1到36的台球排列成关于原点、坐标轴对称的66方阵,坐标均取球心,球的半径为BALL_RADIUS。白球(编号为0)的初始位置和初始速度由用户输入。白球初始位置不能和已有的球重叠,也不能放置在球桌之外。运动过程:采用钢球势分子间相互作用的情景。即当两个球心距离小于等于MAXDISTANCE时产生作用力,大于MAXDISTANCE时没有相互作用。若小球越界,采取弹性碰撞模型,保证能量守恒,在粒子很多时,系统可以近似为动量守恒。对于每个球,受力分析后就可以通过牛顿定律得出台球的运动情况(速度,加速度和位置)。算法与数据结构:数据结构:顺序表。文件构成:head.h 通用头文件seqlist.h 顺序表类的定义及实现(基类)balllist.h 球的顺序表类的定义(派生类)billiard.h 台球类(balllist的数据成员)main.cpp主函数balllist.cpp 球的顺序表类的实现billiard.cpp 台球类的实现functions.cpp 常用函数【注:由于是seqlist是模板类,函数的实现包含在头文件中】类的定义: template class seqlistprotected:int MAXNUM;int n;T * element;public:seqlist(int m=MAX);seqlist(seqlist & seq);seqlist()delete element;/析构函数bool isNULLlist() return (n=0); /判断顺序表是否为空void insertPre(int p,T x);/在p位置插入元素void cancel(int p);/删除p位置的元素int locate(T * x);/查找xint getn() return n;/返回nT * getele() return element;/返回element;class balllist:public seqlist /球顺序表为顺序表的派生类public:balllist(int);/带形参的构造函数,初始化函数balllist();/不带形参的构造函数,球袋的构造函数void force_analysis();/受力分析,得到加速度void position_analysis(balllist * pflist,int time);/位置分析,处理落袋球void cal_pos_vel();/更新位置与速度,越界检查void printall();/输出详细信息friend class billiard;/友元类billiard;class billiardprivate:double x,y,vx,vy,ax,ay;/位置,速度,加速度double mass;/质量int no;/编号int t;/落袋时间public:billiard()billiard(double nx,double ny,double nvx,double nvy,double nax,double nay,int nno) x=nx; y=ny; vx=nvx; vy=nvy; ax=nax; ay=nay; no=nno; mass=MASS;t=0; /带形参的构造函数billiard(billiard & ball);int getno() return no;/返回noint gett() return t;/返回tvoid sett(int nt) t=nt;/设定tvoid move();/移动,改变速度与位置int inhole();/判断是否进洞,并返回洞的序号,没有入洞返回0void cal_a(double fx,double fy);/计算加速度void print();/输出详细信息friend bool whether_equal(billiard * pb1,billiard * pb2);/判断两球是否相同friend double getdistance(billiard * b1,billiard * b2);/计算距离friend double getdistance(double x1,double y1,billiard * b1); /计算距离friend double cal_dx(billiard * b1,billiard * b2); /计算距离friend double cal_dy(billiard * b1,billiard * b2); /计算距离;其他函数double calforce(double dis)/计算球之间的力bool outofrange(double x,double y)/判断球是否出界结果分析:运行结果将输出到”results.txt”中。一种可能的结果是:输入白球坐标(0,1.3)白球初速度(0,100)“results.txt”中:掉入第1个球袋的球情况如下:No.6球落袋时间为0.79No.12球落袋时间为2.998No.18球落袋时间为3.668No.4球落袋时间为21.597No.2球落袋时间为25.249掉入第2个球袋的球情况如下:No.29球落袋时间为1.409No.16球落袋时间为1.761No.23球落袋时间为2.51No.22球落袋时间为2.627No.34球落袋时间为6.316No.30球落袋时间为10.609No.11球落袋时间为13.282No.25球落袋时间为19.989掉入第3个球袋的球情况如下:No.36球落袋时间为0.787No.35球落袋时间为1.475No.24球落袋时间为3.318No.17球落袋时间为3.481No.10球落袋时间为4.652No.3球落袋时间为13.146掉入第4个球袋的球情况如下:No.1球落袋时间为0.79No.7球落袋时间为2.998No.13球落袋时间为3.668掉入第5个球袋的球情况如下:No.26球落袋时间为1.409No.15球落袋时间为1.761No.20球落袋时间为2.51No.21球落袋时间为2.627No.5球落袋时间为4.244No.33球落袋时间为7.043No.8球落袋时间为8.316No.28球落袋时间为9.032No.27球落袋时间为12.75掉入第6个球袋的球情况如下:No.31球落袋时间为0.787No.32球落袋时间为1.475No.19球落袋时间为3.305No.14球落袋时间为3.45No.9球落袋时间为4.617No.0球落袋时间为6.392经验教训:1.对于模板函数的编译机制不了解,一开始将其放在.cpp文件中,导致连接错误。对于模板函数,应该将其放在.h文件中再include到要用到它的地方。2.某处误以为数组下标从1开始,查错查了半天。3.用Debug来判断问题出在哪。通过在出问题处输出结果或在Debug中显示结果来查错。4.一开始规划整个程序的时间花的不够,导致程序的结构有重大的修改,一开始用的是模板类seqlist来管理台球,导致台球表的重要函数都没有封装起来,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心态富足申论题目及答案
- 心理岗面试题目及答案
- 校园保安面试题目及答案
- 史记中的历史事件讲解与课文教学
- 人教版四年级上册第一单元1.3《十进制计数法》课时练(含答案)
- 月夜作文800字8篇范文
- 妈妈的爱100字(12篇)
- 纪念白求恩课件开场白
- 秋天的怀念600字9篇
- 我爱森林600字9篇
- 安装电工电气调试员安全技术操作规程
- 2乳的验收与预处理解析
- 三峡大学级本科电气工程及其自动化二本培养方案
- 柴芍六君子汤加减治疗脾胃病三则
- GB/T 778.1-2018饮用冷水水表和热水水表第1部分:计量要求和技术要求
- GB/T 11547-2008塑料耐液体化学试剂性能的测定
- 伤口造口新进展课件
- (完整版)人工智能介绍课件
- 恶性骨肿瘤化疗及注意事项(58张幻灯片)课件
- 国有企业采购规范和示范文本
- Fisher DVC2000定位器培训课件
评论
0/150
提交评论