解题思路:
参考 了 别人的代码 ,我的思路没有他们的好,但是,通过我自己的努力,用自己的思路做出来了,
碰到难题,真的,要得好几天,都没思路,但自己做出来,是真开心。
思路 : 球每次撞壁,只有一个方向上的速度改变方向,另外一个不变,
#include<stdio.h>
#include<math.h>
//#define PI 3.14159265
int l,w,x,y,r,a,v,s;
double l1,w1,x1,r1,a1,v1,s1,zx,zy;
double xa,ya;
int shuru(){
if(scanf("%d %d %d %d %d %d %d %d",&w,&l,&x,&y,&r,&a,&v,&s)!=EOF){
l1=l;w1=w;x1=x;r1=r;a1=a;v1=v;s1=s;
return 1;
}
else return 2;
}
void diyici(){
double y1,sx,sy;y1=y;
a1=a*asin(1)*2/180; // asin(1)*2 替代 派
xa=cos(a1);
ya=sin(a1);
zx=x1;zy=y1;
//先计算X方向和Y方向撞墙的时间进行比较,看那个方向先撞墙
while(1){
//x方向 撞墙的时间
if(xa>0){
sx=(w1-zx-r1)/(v*xa);
}
else{
sx=(zx-r1)/(v*(-1*xa));
}
if(ya>0){
sy=(l1-zy-r1)/(v*ya);
}
else{
sy=(zy-r1)/(v*(-ya));
}
if(sx<sy){ // 110 100 70 10 5 180 1 9999
zx=zx+v*xa*sx;
zy=zy+v*ya*sx; // 撞墙时的坐标
s1=s1-sx;// 到撞墙用的时间
//printf("B zx=%.2f zy=%2.f s1=%f sx=%f xa=%f\n",zx,zy,s1,sx,xa);
if(s1>0)
xa=-xa;// 撞墙后方向改变了,只有一个方向改变哦
}
if(sx>sy){
zx=zx+v*xa*sy;
zy=zy+v*ya*sy;
s1=s1-sy;
//printf("A zx=%.2f zy=%2.f s1=%f\n",zx,zy,s1);
if(s1>0)
ya=-ya;
}
// sx=sy ?
if(sx==sy){
zx=zx+v*xa*sy;
zy=zy+v*ya*sy;
s1=s1-sy;
if(s1>0){
ya=-ya;
xa=-xa;
}
}
if(s1<=0){
if(s1<0){
zx=zx+v*xa*s1;
zy=zy+v*ya*s1;
}
printf("%.2f %.2f\n",zx,zy);
break;
}
}
}
//主函数部分
int main(){
while(shuru()==1){
if(l==0)
break;
diyici();
}
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1055 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:623 |
C二级辅导-计负均正 (C语言代码)浏览:643 |
点我有惊喜!你懂得!浏览:1392 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:711 |
C二级辅导-等差数列 (C语言代码)浏览:1315 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:549 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:642 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:638 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:606 |