• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            算法學社
            記錄難忘的征途
            posts - 141,comments - 220,trackbacks - 0

            題目描述:

               有個星球起始位置是(xp,yp),繞原點以速度Vp做勻速圓周運動。不明物體起始位置(x,y),速度為V(V>Vp)。這個物體可以隨意移動,但是任何時刻與原點的距離不能小于r。請問這個物體想要與星球位置重合的最少時間是多少?

            吐槽:

                1. 這么猥瑣的計算幾何居然被我捉掉了真是讓我不得不單獨拿出一篇隨筆來寫阿。。。。。。。。
                2. 其實是參照bmerry大神的代碼的。。。。。。。。。。

            算法分析:

                二分時間(至于為何可以二分就不講了),先用二維仿射幾何計算出星球的新位置P。
                再計算不明物體是否可以在這個時間內(nèi)運動到那個新位置處。
                
                如果二者連線形成的線段到原點距離不小于r。那么直接做直線運動。
                如果小于r, 判斷是否和r的內(nèi)圓相交。
                如果相交的話,求出四條切線。 切線的線段長是固定的,要在小圓上選擇一個最優(yōu)的弧。
                因為切點只有四個,直接枚舉即可。
             1 #include<iostream>
             2 #include<complex>
             3 #include<cmath>
             4 using namespace std;
             5 #define eps 1e-9
             6 typedef complex <double> pnt;
             7 const double PI = acos(-1);
             8 static double dot (const pnt& a, const pnt& b) { return real(conj(a) * b);}
             9 static double cross(const pnt&a, const pnt& b) { return imag(conj(a) * b);}
            10 inline void chkmin(double &a,const double b){ if(a>b) a = b;}
            11 double dist(pnt a, pnt b,double r){
            12     double ab = abs(a-b);
            13     if(ab < eps) return ab;
            14     if(abs(cross(a ,a-b) / ab) >= r) return ab;
            15     if(dot ( -a, b-a) < 0.0 || dot(-b, a-b) <0.0) return ab;
            16 //    cout<<a<<" "<<dot(a,a)<<" "<<r*r<<endl;
            17     double as = sqrt(dot(a,a) - r*r);
            18     double bs = sqrt(dot(b,b) - r*r);
            19     double a_ang = arg(pnt(r,as));
            20     double b_ang = arg(pnt(r,bs));
            21     double A[2] = {arg(a) + a_ang, arg(a) - a_ang};
            22     double B[2] = {arg(b) + b_ang, arg(b) - b_ang};
            23     double ans = PI*2;
            24     for(int i=0;i<2;i++)
            25         for(int j=0;j<2;j++){
            26             double ang = abs(A[i] - B[j]);
            27             while(ang > PI*2) ang -= PI*2;
            28             if(ang > PI) ang = 2*PI - ang;
            29             chkmin(ans , ang);
            30         }
            31 //    cout<<as<<" "<<bs<<" "<<r*ans<<endl;
            32     return as + bs + r * ans;
            33 }
            34 int main(){
            35     double xp,yp,vp,x,y,v,rp;
            36     while(cin >> xp >> yp >> vp >> x >> y >> v >> rp){
            37         pnt p1 = pnt(xp,yp);
            38         pnt p0 = pnt(x,y);
            39         double l = 0, r = 1e9;
            40         double R = abs(p1);
            41         while(abs(r-l) > eps){
            42             double t = (l+r) * 0.5;
            43             pnt P = p1 * exp(pnt(0,t*vp / R));
            44             double d = dist(p0,P,rp);
            45 //            cout<<P<<endl;
            46 //            cout<<l<<" "<<r<<" "<<t<<" "<<d<<endl;
            47             if(d <= v*t) r = t;
            48             else l = t;
            49         }
            50         cout.precision(9);
            51         cout << l << endl;
            52     }
            53 }
            54 
            posted on 2012-06-23 19:26 西月弦 閱讀(494) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告
            97精品伊人久久久大香线蕉| 一级做a爰片久久毛片免费陪| 亚洲精品无码久久久久| 99久久夜色精品国产网站 | 一本一道久久综合狠狠老 | 久久久久亚洲精品无码网址| 精品久久综合1区2区3区激情| 亚洲国产成人久久综合野外| 久久99精品久久久久久hb无码 | 久久久久综合国产欧美一区二区| 伊人久久一区二区三区无码| 无码人妻少妇久久中文字幕蜜桃| 国产精品九九久久精品女同亚洲欧美日韩综合区| 久久久久免费视频| 久久久这里只有精品加勒比| 久久国产精品偷99| 无码国内精品久久人妻蜜桃| 久久精品无码一区二区三区| 精品国产乱码久久久久久呢 | 99精品伊人久久久大香线蕉| 久久经典免费视频| 久久99精品国产麻豆不卡| 亚洲中文字幕无码久久精品1| 国内精品欧美久久精品| 久久久女人与动物群交毛片| 青青青国产精品国产精品久久久久| 久久久久亚洲精品无码网址| 国产综合成人久久大片91| 久久精品视频免费| 99久久精品国产麻豆| 亚洲va久久久噜噜噜久久天堂| 久久久久久久97| 亚洲午夜无码久久久久| 久久天天躁狠狠躁夜夜2020一| 一本久久免费视频| 精品国产日韩久久亚洲| 国产精品久久久久久久人人看 | 一本一道久久a久久精品综合| 少妇熟女久久综合网色欲| 久久久久人妻一区二区三区vr| 久久精品亚洲一区二区三区浴池|