青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

poj 3525 Most Distant Point from the Sea

   這個(gè)題的題意是給定一個(gè)凸多邊形表示的海島,求海島離大海最遠(yuǎn)的距離。可以轉(zhuǎn)化為一個(gè)凸多邊形內(nèi)部最多能夠放入一個(gè)多大的圓。
顯然可以對(duì)圓的半徑進(jìn)行二分,但是怎么確定圓心了。確定是否存在圓心,可以把原來(lái)的凸多邊形往內(nèi)部移動(dòng)r(圓的半徑)的距離之后,
再對(duì)新的多邊形求半平面交,如果半平面交存在(是個(gè)點(diǎn)即可),那么當(dāng)前大小的圓能夠放入。
   求半平面交的算法可以用上一篇中的N*N復(fù)雜度的基本算法。本題還涉及到一個(gè)知識(shí),就是如何把一條直線往逆時(shí)針?lè)较蚧蛘唔槙r(shí)針?lè)较?br />移動(dòng)R的距離。其實(shí),可以根據(jù)單位圓那種思路計(jì)算。因?yàn)橄喈?dāng)于以原來(lái)直線上的一點(diǎn)為圓心,以r為半徑做圓,而且與原來(lái)的直線成90的夾
角,那么后來(lái)點(diǎn)的坐標(biāo)是((x0 + cos(PI / 2 +θ )),(y0 + sin(PI / 2 + θ))),轉(zhuǎn)化一下就是(x0 - sinθ,y0 + cosθ)。那么直接可以
求出dx = / (vp[i].y - vp[(i + 1) % nN].y) * fR / fDis,dy = (vp[(i + 1) % nN].x - vp[i].x) * fR / fDis,fDis是線段的長(zhǎng)度。
   
   代碼如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;

const double fPre = 1e-8;

struct Point
{
    double x,y;
    Point(){}
    Point(const Point& p){x = p.x, y = p.y;}
    Point(double fX, double fY):x(fX), y(fY){}
    Point& operator+(const Point& p)
    {
        x += p.x;
        y += p.y;
        return *this;
    }
    Point& operator+=(const Point& p)
    {
        return *this = *this + p;
    }
    
    Point& operator-(const Point& p)
    {
        x -= p.x;
        y -= p.y;
        return *this;
    }
    Point& operator*(double fD)
    {
        x *= fD;
        y *= fD;
        return *this;
    }
};
typedef vector<Point> Polygon;
int DblCmp(double fD)
{
    return fabs(fD) < fPre ? 0 : (fD > 0 ? 1 : -1);
}

double Cross(Point a, Point b)
{
    return a.x * b.y - a.y * b.x;
}

double Det(double fX1, double fY1, double fX2, double fY2)
{
    return fX1 * fY2 - fX2 * fY1;
}

double Cross(Point a, Point b, Point c)
{
    return Det(b.x - a.x, b.y - a.y, c.x - a.x, c.y - a.y);
}

Point Intersection(Point a1, Point a2, Point b1, Point b2)
{
    Point a = a2 - a1;
    Point b = b2 - b1;
    Point s = b1 - a1;
    return a1 + a * (Cross(b, s) / Cross(b, a));
}

Polygon Cut(Polygon& pg, Point a, Point b)
{
    Polygon pgRet;
    int nN = pg.size();
    
    for (int i = 0; i < nN; ++i)
    {
        double fC = Cross(a, b, pg[i]);
        double fD = Cross(a, b, pg[(i + 1) % nN]);
        
        if (DblCmp(fC) >= 0)
        {
            pgRet.push_back(pg[i]);
        }
        if (DblCmp(fC * fD) < 0)
        {
            pgRet.push_back(Intersection(a, b, pg[i], pg[(i + 1) % nN]));
        }
    }
    //printf("pgRet number:%d\n", pgRet.size());
    return pgRet;
}

double Dis(Point a, Point b)
{
    return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
//返回半平面的頂點(diǎn)個(gè)數(shù)
int HalfPlane(Polygon& vp, double fR)
{
    Polygon pg;
    pg.push_back(Point(-1e9, -1e9));
    pg.push_back(Point(1e9, -1e9));
    pg.push_back(Point(1e9, 1e9));
    pg.push_back(Point(-1e9, 1e9));
    int nN = vp.size();
    for (int i = 0; i < nN; ++i)
    {
        double fDis = Dis(vp[i], vp[(i + 1) % nN]);
        double dx = (vp[i].y - vp[(i + 1) % nN].y) * fR / fDis;
        double dy = (vp[(i + 1) % nN].x - vp[i].x) * fR / fDis;
        Point a = vp[i], b = vp[(i + 1) % nN], c(dx, dy);
        a += c;
        b += c;
        //printf("%f %f %f %f\n", a.x, a.y, b.x, b.y);
        pg = Cut(pg, a, b);
        if (pg.size() == 0)
        {
            return 0;
        }
    }
    return pg.size();
}
 
int main()
{
    int nN;
    vector<Point> vp;
    
    while (scanf("%d", &nN), nN)
    {
        vp.clear();
        Point p;
        for (int i = 0; i < nN; ++i)
        {
            scanf("%lf%lf", &p.x, &p.y);
            vp.push_back(p);
        }
        double fMin = 0.0, fMax = 10000.0;
        while (DblCmp(fMin - fMax))
        {
            double fMid = (fMin + fMax) / 2;
            int nRet = HalfPlane(vp, fMid);
            //printf("fMid:%f, nRet:%d\n", fMid, nRet);
            if (nRet == 0)
            {
                fMax = fMid;
            }
            else
            {
                fMin = fMid;
            }
        }
        printf("%.6f\n", fMax);
    }
    
    return 0;
}

posted on 2012-07-23 16:45 yx 閱讀(880) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 計(jì)算幾何

<2012年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

導(dǎo)航

統(tǒng)計(jì)

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學(xué)

網(wǎng)友

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美激情精品久久久久久蜜臀| 亚洲欧美精品在线| 美女视频黄a大片欧美| 欧美日韩小视频| 亚洲国产另类精品专区| 国产一区二区三区高清| 久久露脸国产精品| 一二美女精品欧洲| 伊人成人在线视频| 国产精品网站一区| 国产精品高精视频免费| 欧美日韩一级黄| 国产精品国色综合久久| 中日韩在线视频| 久久久精品一品道一区| 国产精品av一区二区| 亚洲精品久久在线| 国产在线观看一区| 噜噜噜噜噜久久久久久91| 久久精品人人做人人爽电影蜜月| 欧美精选午夜久久久乱码6080| 亚洲精品欧美| 韩国av一区二区三区四区| 国产精品一区=区| 国产精品三级视频| 亚洲福利在线看| 伊人狠狠色j香婷婷综合| 亚洲精品美女久久久久| 亚洲专区在线| 久久蜜桃精品| 红桃视频一区| 亚洲日韩第九十九页| 久久久久久亚洲精品杨幂换脸| 国产日韩欧美制服另类| 欧美日韩国产黄| 欧美好吊妞视频| 久久久亚洲影院你懂的| 一本久道久久久| 欧美国产第二页| 国产精品99久久久久久久久久久久 | 亚洲精品乱码久久久久久蜜桃91| 亚洲精品久久7777| 久久九九国产精品| 久久综合999| 亚洲黑丝在线| 欧美一级网站| 亚洲精品久久久久久久久久久久| 国产精品手机视频| 国产精品国产三级国产普通话三级 | 亚洲高清视频中文字幕| 亚洲美女毛片| 久久成人av少妇免费| 国产精品国产精品| 亚洲精品在线看| 欧美黄色片免费观看| 亚洲欧美日韩专区| 国产欧美丝祙| 亚洲第一精品福利| 国产精品美女久久久久久2018| 亚洲日本一区二区三区| 欧美在线观看视频一区二区三区 | 欧美韩国日本一区| 欧美三级视频在线观看| 欧美精品久久久久久久久老牛影院 | 国产精品自拍在线| 亚洲少妇最新在线视频| 欧美激情女人20p| 欧美刺激午夜性久久久久久久| 激情av一区| 亚洲激情啪啪| 亚洲高清久久网| 欧美在线免费观看| 亚洲国产精品久久久久久女王| 在线亚洲一区观看| 欧美一区二区在线免费播放| 久久嫩草精品久久久久| 亚洲国产精品专区久久| 午夜久久久久| 欧美色综合网| 亚洲精品国产精品国自产观看浪潮| 亚洲欧美久久久| 亚洲尤物在线| 午夜精品久久久久久99热软件| 国产精品自拍三区| 99在线精品免费视频九九视| 国产欧美日韩精品丝袜高跟鞋| 亚洲美女精品久久| 国产精品久久久久久久久久久久久| 亚洲免费在线精品一区| 亚洲综合不卡| 欧美大片免费观看| 久久午夜色播影院免费高清| 中文日韩在线| 国精品一区二区| 香港久久久电影| 亚洲香蕉成视频在线观看 | 亚洲大片在线| 久久精品午夜| 欧美**字幕| 亚洲一区二区三区在线视频| 免费成人你懂的| 亚洲在线免费观看| 欧美刺激性大交免费视频| 亚洲自拍都市欧美小说| 欧美日韩99| 欧美成年人在线观看| 亚洲主播在线播放| 国产视频精品va久久久久久| 欧美激情视频网站| 欧美日韩在线免费| 欧美一区二区三区精品| 最近中文字幕日韩精品| 欧美精品久久久久a| 亚洲视频1区2区| 久久深夜福利免费观看| 亚洲国产第一页| 中文精品99久久国产香蕉| 久久久久久穴| 欧美 日韩 国产一区二区在线视频| 娇妻被交换粗又大又硬视频欧美| 亚洲欧美中文另类| 久久久噜噜噜久久狠狠50岁| 亚洲第一精品夜夜躁人人爽| 噜噜噜在线观看免费视频日韩| 亚洲理论在线| 一本色道久久精品| 亚洲一区成人| 亚洲欧洲日产国产网站| 欧美~级网站不卡| 久久国产一区二区| 国模私拍视频一区| 亚洲国产天堂久久综合| 亚洲免费在线观看视频| 一区二区三区欧美在线| 麻豆精品在线观看| 免费在线成人av| 国产毛片精品国产一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 久久一区视频| 亚洲视频网在线直播| 欧美成人免费va影院高清| 日韩亚洲欧美精品| 最近中文字幕mv在线一区二区三区四区 | 久久精品视频导航| 久久久久免费| 国产日韩欧美电影在线观看| 亚洲天堂男人| 亚洲已满18点击进入久久| 欧美日韩久久不卡| 亚洲欧美日韩精品久久久久| 激情久久久久久久| 猛干欧美女孩| 91久久精品一区二区别| 亚洲精品在线观看免费| 久久riav二区三区| 美国十次成人| 国产精品久久久久毛片软件| 香蕉国产精品偷在线观看不卡| 99精品视频免费在线观看| 亚洲精品在线二区| 亚洲电影免费观看高清完整版在线观看 | 欧美极品aⅴ影院| 久久久伊人欧美| 99国产精品视频免费观看一公开| 一本色道久久99精品综合| 国产精品欧美一区喷水| 久久亚洲精品一区| 99视频+国产日韩欧美| 欧美成人国产va精品日本一级| 欧美日韩精品在线| 久久国产精品免费一区| 99精品国产99久久久久久福利| 久久午夜电影| 最新热久久免费视频| 国产精品久在线观看| 久久久久久高潮国产精品视| 亚洲天堂免费在线观看视频| 亚洲国产专区校园欧美| 亚洲一区二区三区精品在线 | 亚洲视频精品在线| 久久婷婷国产麻豆91天堂| 免费观看成人www动漫视频| 欧美黄色影院| 欧美日韩精品一区二区| 亚洲视屏在线播放| 亚洲毛片网站| 欧美国产日韩一区二区在线观看| 亚洲在线免费视频| 亚洲人成人99网站| 国产欧美日韩精品a在线观看| 欧美激情一区二区三区在线视频观看| 欧美一区二区三区另类| 亚洲欧美中文日韩在线| 亚洲小说春色综合另类电影| 亚洲区第一页| 99热免费精品| 欧美在线一区二区| 久久久久久久999精品视频| 亚洲黄色免费| 久久久噜噜噜久久中文字免|