台球问题分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
台球问题分析.ppt

张乃孝:算法与数据结构——C语言描述 * * 台球运动过程模拟 2006 算法与数据结构作业题 目的:分析物理问题的方法、 熟悉变量、数组、指针以及输入输出函数等C语言内容 问题:完全相同的16个硬球,直径为r,质量为m。不同球之间距离为r/2,15个排列成为等边三角型。另外一个以速度V运动。如果球与壁碰撞的地点与顶点距离小于a,就认为落袋。 要求:请计算各个球落袋的时间次序,在屏幕和文件中输出。 2米 3米 V a 问题的描述 基本思路 每个球受到的作用力是可以计算的,那么每次时间增加量为?t后球的新位置和速度也是可以唯一确定的(牛顿定理)。 在新位置,可以判断球是否已经落袋。 随时间的逐渐增加,所有的球的运动轨迹是可以模拟的。 1、 在桌面上运动的球可能发生的情况: 当球之间的距离小于一定的距离,就会有排斥作用(碰撞); 当球碰到球台的边缘的时候,就会被反射回来; 当它们到达球袋区域,就会落袋,离开桌面; 2、 物理理论和模型 ? 牛顿运动方程 球之间相互作用力的描述 球与球台边缘碰撞过程力的描述 一、问题的分析 物理过程分析清楚之后,下一步内容就是数据结构和算法的工作了。。。。。。 t1 t2 t3 t4 tn 2-1 数据结构 二、程序设计 1、一些常数是必须提前知道的: #define TOTALBALLNUMBER 17 #define ORIGINX 0 //球阵列的中心位置 #define ORIGINY 0 #define HEIGHT 3.0 //高,Y轴 #define WIDTH 2.0 //宽,X轴 #define CORNER 0.1 //球袋的尺寸,大小有什么影响? #define INTERVAL 0.1 //球之间的间隔 #define MAXDISTANCE 0.3 //这样所有的球都有一定的初速度,为什么? 2米 3米 V a 需要一些变量来在程序中如何描述这些球的状态 BilliardsType BallsOntable[TOTALBALLNUMBER ]; BilliardsType FalledBall[TOTALBALLNUMBER ]; 描述球的集合 BilliardsType Ball; 描述单个球 2、定义球的结构 typedef struct { int No; float x,y, vx,vy, ax,ay, mass; } BilliardsType; 有许多算法可以采用:分子动力学方法、几何计算方法等。 我们采用分子动力学的方法,比较容易描述时间尺度上的过程 init(); //各个球的初始位置,运动球的初始速度、位置等 while(桌面上球集合为空) { 计算?t后各个球的位置; 判断是否有球落入袋中。如果有,把它从桌面球集合中除去,加入到落袋球的序列中; ? 计算桌面上各个球在新位置上所受到的作用力; 计算在这些作用力作用下各个球的新的速度; } ? 输出结果(各个球落袋的次序、时间、速度、角度等信息) 2-2、 算法 初试化函数init() 作用力计算ForceCal() 运动位置BallNewState() RemoveFromBallList() ResultOutput 程序的流程 判断一个集合是否为空: isEmpty(Balllist); 置一个集合为空: emptySet(Balllist); 从集合中去掉一个元素: removeFromSet(Balllist, Ball); 向集合里增加一个元素: addToSet(Balllist, Ball); 计算下一刻的球的新位置:newposition(Balllist); 计算下一刻的球的新速度:newvolecity(Balllist); 检查落入袋中的球: FallinCheck(Balllist, Balllist); 需要以下的一些操作: BilliardsType BallsOntable[TOTALBALLNUMBER ],ball; BilliardsType FalledBall[TOTALBALLNUMBER ]; //描述球的集合 Float t=0,delta_t=0.001; Int counter,CurrentBallNo= TOTALBALLNUMBER; Init(Ontable); //初始化所有台球的位置、速度 EmptySet(FalledBall

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档