资源描述:
《程序设计赛基础实训.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2012程序设计竞赛基础实训8239台球碰撞在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球沿极角为b的射线(即:x正半轴逆时针旋转到此射线的角度为b)以初速度v飞出。因球与桌面的磨擦,球作的加速度为a的匀减速率运动,每次碰到球桌边框时均发生完全弹性碰撞(反射角等于入射角)。试求球停止时球心所在位置。输入:l=180,w=120,x=35,y=40,r=5,b=30,v=27,a=6原题:在平面直角坐标系下,台球桌是
2、一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球沿极角为a的射线(即:x正半轴逆时针旋转到此射线的角度为a)飞出,每次碰到球桌时均发生完全弹性碰撞(球的速率不变,反射角等于入射角)。如果球的速率为v,s个时间单位之后球心在什么地方?输入输入文件最多包含25组测试数据,每个数据仅一行,包含8个正整数L,W,x,y,R,a,v,s(100<=L,W<=105,1<=R<=5,R<=x<=L-R,R<=y<=W-R,0<=a<360,1<=v,s<=
3、105),含义见题目描述。L=W=x=y=R=a=v=s=0表示输入结束,你的程序不应当处理这一行。输出对于每组数据,输出仅一行,包含两个实数x,y,表明球心坐标为(x,y)。x和y应四舍五入保留两位小数。样例输入样例输出100100801059022311010070105180199990000000080.0056.0071.0010.00设计要点:(1)确定球心区域设球心座标为(x,y),则有球心矩形区域:x1≤x≤x2,y1≤y≤y2其中:x1=r,x2=l-r;y1=r,y2=w-r(2)没撞击时球位置设开始时球心位于(x
4、0,y0),球沿极角为a的射线射出,球的速率为v,s个时间单位之后球心在(x,y):x=x0+v*s*cos(a*3.14159/180)y=y0+v*s*sin(a*3.14159/180)(3)撞击轴对称若球与右竖边(x2)撞击,撞击后横月座标为:x=2*x2-x若球与上横边(y2)撞击,撞击后纵月座标为:y=2*y2-y程序设计://台球碰撞#include#includevoidmain(){doublel,w,r,a,v,s,x,y,x1,x2,y1,y2;printf("请确定球台边框(l
5、,w):");scanf("%lf,%lf",&l,&w);printf("请确定球心开始位置(x,y):");scanf("%lf,%lf",&x,&y);printf("请确定球半径r:");scanf("%lf",&r);printf("请确定射击角度a:");scanf("%lf",&a);printf("请确定射击速度v:");scanf("%lf",&v);printf("请确定时间s:");scanf("%lf",&s);x1=r;x2=l-r;y1=r;y2=w-r;x=x+v*s*cos(a*3.1415926/18
6、0);y=y+v*s*sin(a*3.1415926/180);while(x7、
8、x>x2
9、
10、y11、
12、y>y2){if(x>x2)x=2*x2-x;if(xy2)y=2*y2-y;if(y13、:在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为r的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球沿极角为b的射线(即:与正半轴逆时针旋转到此射线的角度为b)以初速度v飞出。因球与桌面的磨擦,球作的加速度为a的匀减速率运动,每次碰到球桌边框时均发生完全弹性碰撞(反射角等于入射角)。试求球停止时球心所在位置。解:球作的初速度为v0,加速度为a的匀减速率运动,设t时刻球的速度为vt,则vt=v0-a*t停止时vt=0,则运行时间为:t=v0/a球运行距离为s=v0*t
14、-a*t*t/2=v0*v0/2/a//台球碰撞#include#includevoidmain(){doublel,w,r,a,b,v,s,x,y,x1,x2,y1,y2;printf