Chocolaid


私信TA

用户名:318013612

访问量:1630

签 名:

等  级
排  名 5527
经  验 1469
参赛次数 0
文章发表 9
年  龄 0
在职情况 学生
学  校 哈尔滨工业大学(威海)
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

#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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区