解题思路:
注意事项:
参考代码:
#include <iostream>
#include <stdio.h>
#include <cmath>
#define pi 3.1415926535897932 //测试点对精度要求比较高,pi的位数要长
using namespace std;
int main() {
double L, W, x, y, R, a, v, s;
while (cin >> L >> W >> x >> y >> R >> a >> v >> s) {
if (L == 0 && W == 0 && x == 0 && y == 0 && R == 0 && a == 0 && v == 0 && s == 0)
break;
double sx = 0; //x方向走过的的总距离
double sy = 0; //y方向走过的的总距离
double vx = v * cos(pi * a / 180); //x方向速度
double vy = v * sin(pi * a / 180); //y方向速度
if (vx > 0) {
bool xyou = true; //一开始向右走
while (sx <= vx * s) { //当sx小于等于应走的距离时一直循环
if (xyou) {
sx += L - R - x;
xyou = false;
x = L - R;
} else { //换方向
sx += x - R;
xyou = true;
x = R;
}
}
sx = sx - vx * s; //减去多余的部分
if (x == R)
x = x + sx;
if (x == L - R)
x = x - sx;
}
if (vx < 0) {
bool xzuo = true;
while (sx <= -vx * s) { //一开始向左走,注意vx<0
if (xzuo) {
sx += x - R;
xzuo = false;
x = R;
} else {
sx += L - R - x;
xzuo = true;
x = L - R;
}
}
sx = sx + vx * s;
if (x == R)
x = x + sx;
if (x == L - R)
x = x - sx;
}
if (vx == 0)
x = x;
if (vy > 0) { //对于y方向的讨论同理
bool yshang = true;
while (sy <= vy * s) {
if (yshang) {
sy += W - R - y;
yshang = false;
y = W - R;
} else {
sy += y - R;
yshang = true;
y = R;
}
}
sy = sy - vy * s;
if (y == R)
y = y + sy;
if (y == W - R)
y = y - sy;
}
if (vy < 0) {
bool yxia = true;
while (sy <= -vy * s) {
if (yxia) {
sy += y - R;
yxia = false;
y = R;
} else {
sy += W - R - y;
yxia = true;
y = W - R;
}
}
sy = sy + vy * s;
if (y == R)
y = y + sy;
if (y == W - R)
y = y - sy;
}
if (vy == 0)
y = y;
printf("%.2lf %.2f\n", x, y);
}
return 0;
}
0.0分
1 人评分
简单的a+b (C语言代码)浏览:765 |
C语言训练-角谷猜想 (C++代码)(3N+1问题)浏览:1850 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:773 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:545 |
求圆的面积 (C语言代码)浏览:1366 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:909 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:624 |
Wu-求圆的面积 (C++代码)浏览:1994 |
简单的a+b (C语言代码)浏览:661 |
幸运数 (C++代码)浏览:1309 |