- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
虚拟第三次两课时
走进虚拟世界(三);机器人存储位置设定;笛卡尔坐标系统;程序流程图:直观形象,易于理解下面是美国国家标准化协会ANSI(American National Standard Institute)规定的一些常用的流程图符号;系统时钟;变量:C语言的一个基本元素,可用它存放不同的数值,程序中变量的作用和代数中未知数的作用类似。在使用一个变量前必须先定义它。;赋值语句;循环:while;画线;练习;画出流程图,1、机器人撞球的流程图2、机器人不断撞球的流程图; --避免乌龙球;?机器人的进攻方向以及选择结构 ;double heading; double courtHeight; oublecourtWidth;;分析代码尝试编程;用了if语句来实现选择结构。其中heading0是关系表达式,用来判断heading是否0。如果0时,则表达式为真,否则为假。如果为真时,则执行语句doMoveTo(courtWidth, courtHeight/2),为假则执行语句doMoveTo(0,courtHeight/2)。;练习2:若机器人从左往右进攻,转动到指定角度,并且前进或者倒退;若机器人从右往左进攻,转动到指定角度,并且前进或者倒退;;?足球的运动方向; 如图所示,当足球沿着平行于X轴的方向,从左向右运动时,函数getBallHeading返回的值为0;当足球沿着X轴的方向,从右向左运动时,函数getBallHeading返回的值为PI。我们说足球从左向右运动,是指足球的运动方向的大小在0到PI/2之间或者为3*PI/2到2*PI之间;足球从右向左运动,是指足球的运动方向大小在PI/2到3*PI/2之间。;练习3,如果机器人从左往右进攻,球从右往左运动,则撞球,否则回到球门前。如果机器人从右往左进攻,球从左往右运动,则撞球,否则回到球门前。;练习4:若机器人从左向右进攻,若球在前方则踢球,若球在后方,若在上方,机器人向右下移动,然后回到球门前,若下方,机器人向右上方移动,然后回到球门前若机器人从右向左进攻,若球在前方在踢球,若球在机器人后方,若上方机器人向左下方移动,然后回到球门前,若下方,机器人想左上方移动,然后回到球门前。;练习5:若机器人从左向右进攻,球由右向左运动,若球运动的直线与球门有交点,直接撞球,若没有交点,在球门前上下晃动。若机器人从右向左进攻,球由左向右运动,若球运动的直线与球门有交点,直接撞球,若没有交点,在自己球门前上下晃动。; 机器人先得到足球的一些信息,包括当前足球的坐标位置和运动方向。通过这些信息可以求出足球的运动直线。如果足球是在向自己的球门方向运动,机器人通过判断这条直线跟自己的球门线是否有交点就可以预测到足球是否会被射进自己的球门。如果在某一时刻,机器人预测到足球沿着直线y=k*x+b向右边运动,而机器人的进攻方向是从右向左。显然,如果足球沿着这样的方向继续运行下去就会被射进自己的球门。这时,机器人就可以采取一些措施来避免这种情况。这里主要考虑的是如何避免“乌龙球”的产生。为了简单起见,机器人只是做一些简单的动作来尽量避免“乌龙球”。;为了预测足球的运动直线是否与球门线有交点需要知道球门线的最小的y坐标值和最大的y坐标值。利用球门的大小和场地的宽度和高度就可以求出这两个值。显然,左边与右边的球门线的最小的y坐标值和最大的y坐标值是相等的,这里用变量goalMin和goalMax来分别存储。;由足球的运动方向和坐标位置就可以求出足球的运动直线。用变量b和k来存储直线的有关信息。;球门最低点goalmin:courtheight/2-goalwidth/2球门最高点goalmax:courtheight/2+goalwidth/2;练习6:引入控制变量shoot; 我们看到变量shoot有时被赋值为0,有时被赋值为1。在编程中,我们经常通过一些变量来控制程序的运行状态,这就是控制变量。shoot在这里是做为控制变量被使用的。设置shoot为1时表示机器人要撞球;设置shoot为0表示机器人应在球门前晃动。当程序中条件语句比较复杂时,通过设置控制变量来控制程序的运行状态可以使程序变得简洁清晰。;void run(void)
{
int shoot;/*定义控制变量*/
double ballHeading;/*定义变量,存储球的运动方向*/
double heading;/*定义变量,存储机器人的进攻方向*/
double ballX,ballY;/*定义变量,存储球的ballX,ballY坐标*/
double goalMin,goalMax;
double courtWidth,courtHeig
文档评论(0)