Keiichi Tsuchiya the Drift King Gym - 102028D

Drifting is a driving style in which the driver uses the throttle, brakes, clutch, gear shifting and steering input to keep the car in a state of oversteer while manoeuvring from turn to turn. As a sport, the drifting was first practised in Japan in the late 80s before gaining worldwide popularity in the decade that followed.

Keiichi Tsuchiya is a Japanese driver who is better known as the Drift King. He played an important role in popularizing the art of drifting. This pioneer inspired many successful drivers. He appeared in the movie The Fast and the Furious: Tokyo Drift and he is often employed on various movie sets as both driver and stunt coordinator. Keiichi Tsuchiya's talent in the drifting is especially true of his big stunt, the ultimate drifting.

Here is what he could do. The drift car he drives is shaped like a rectangular box of width aa inches and of length bb inches. He makes a right turn of a curve whose internal boundary is an arc with dddegrees in a circle with a radius of rr inches. As a super-skilled driver, he maintains his car to keep the contact and tangency at the internal boundary. That is, the right front corner of the car should always run along the internal boundary and the direction of the car body should always be tangential to the internal boundary.

We have measured that the straightaways before and after the curve are long enough, and the width of the lane is invariable. As what we meet in real life, if a lane has a fixed width, for each point of its one side, the distance to the nearest point of the other side is exactly its width. Now you are asked to calculate the minimal width ww of the lane so that the Drift King could drive throughout the curve without drifting out of the lane.

Input

The input contains several test cases, and the first line contains a positive integer TT indicating the number of test cases which is up to 104104.

For each test case, the only one line contains four integers aa, bb, rr and dd, where 0<a,b,r<1000<a,b,r<100 and 0<d<1800<d<180.

Output

For each test case, output a line containing the minimal width (in inches) of the lane with an absolute or relative error of at most 10−610−6. Precisely speaking, assuming that your answer is aa and the jury's answer is bb, your answer will be considered correct if |a−b|max{1,|b|}≤10−6|a−b|max{1,|b|}≤10−6.

思路:

由图知,一般情况下,车尾距圆心最远的点,与圆心连线是最远距离ans1。由于车头右侧和圆相切。得:

ans1=sqrt((b*b+(a+r)*(a+r))),我们顺便再求出a+r与ans1的夹角ap

但这种情况仅限于,这条最大的边能进入弯道时有效,若这条边还还没进入弯道,这个弯就结束,车子就要开始直行了  那就是下图这个情况。


如图:假设现在d是我红笔标出的大小,那么新弯道如红笔所示。这时候你会意识到ap>d。ans1就是黄线标注出的,这是黄线显然不是我们要求的答案,蓝线才是。哪这个蓝线怎么求呢。看途中标示,蓝线长度=ans1*cos(ap-d)。

# include <iostream>
# include <cstdio>
# include <cmath>
# define pi acos(-1.0)
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        double a,b,r,d,tmp,ans2;
        scanf("%lf%lf%lf%lf",&a,&b,&r,&d);
        d=d*pi/180.;
        double ans1=sqrt((b*b+(a+r)*(a+r)));
        double ap=atan(b/(a+r));
        if(d>=ap){
            printf("%.12lf\n",ans1-r);
        }
        else{
            tmp=ap-d;
            ans2=ans1*cos(tmp);
            printf("%.12lf\n",ans2-r);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/xiao_you_you/article/details/89357815