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

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>
            一本综合精品| 欧美一区二区三区在线看| 麻豆视频一区二区| 欧美亚洲一区在线| 欧美在线三级| 久久综合中文字幕| 欧美成年人视频| 欧美精品一区二区三区一线天视频| 美日韩免费视频| 欧美日韩精品免费观看| 欧美午夜片在线免费观看| 国产精品久久福利| 国内精品福利| 日韩视频免费在线| 欧美一区二区视频在线观看| 久久综合色影院| 亚洲青涩在线| 亚洲午夜日本在线观看| 久久国产精品色婷婷| 欧美精品一区在线| 国产亚洲激情在线| 亚洲美女尤物影院| 久久成人综合视频| 欧美激情一区二区三区在线视频 | 亚洲一区二区三区四区在线观看| 亚洲欧美日韩系列| 欧美国产综合一区二区| 国产精品欧美风情| 亚洲三级毛片| 欧美一区视频在线| 亚洲国产欧美不卡在线观看| 亚洲欧洲99久久| 欧美日本亚洲| 亚洲第一精品在线| 欧美亚洲在线视频| 亚洲看片免费| 久久综合九色九九| 国产日韩亚洲| 亚洲欧美亚洲| 亚洲精品一区二区三| 欧美黄色影院| 久久综合中文色婷婷| 国产精品爽爽ⅴa在线观看| 在线看无码的免费网站| 亚洲欧美一区二区三区久久 | 这里只有精品电影| 乱人伦精品视频在线观看| 国产精品无人区| 亚洲一区二区免费视频| 亚洲国产成人av好男人在线观看| 欧美一区二区三区在线观看| 国产精品久久久久久久久果冻传媒| 亚洲日韩成人| 亚洲电影免费| 欧美成人网在线| 日韩午夜黄色| 亚洲精品一区二区三区婷婷月 | 亚洲另类自拍| 欧美极品色图| 亚洲美女区一区| 亚洲国产精品成人一区二区| 久久字幕精品一区| 亚洲国产精品小视频| 欧美大片网址| 欧美激情亚洲视频| 日韩午夜激情电影| 亚洲理伦在线| 国产精品久久久久一区二区三区共 | 国产精品毛片大码女人| 亚洲影院一区| 亚洲一区二区三区三| 国产麻豆日韩欧美久久| 久久精品成人| 美玉足脚交一区二区三区图片| 亚洲精品免费在线播放| 亚洲精品自在在线观看| 国产精品国产福利国产秒拍| 欧美一级免费视频| 久久精品国产96久久久香蕉| 亚洲国产成人在线| 亚洲精品国精品久久99热一| 欧美性天天影院| 久久精品国产免费观看| 女人香蕉久久**毛片精品| 中国成人在线视频| 亚洲欧美大片| 亚洲国产综合91精品麻豆| 欧美中文在线观看| 午夜宅男久久久| 国产一区亚洲一区| 欧美国产精品va在线观看| 欧美日韩aaaaa| 久久精品久久99精品久久| 另类天堂视频在线观看| 在线一区日本视频| 欧美专区一区二区三区| 亚洲蜜桃精久久久久久久| 欧美视频官网| aa级大片欧美三级| 国产一区av在线| 亚洲另类在线一区| 伊人久久综合| 亚洲午夜在线观看| 亚洲区在线播放| 欧美在线91| 亚洲午夜高清视频| 六月天综合网| 久久精品视频一| 欧美日韩在线不卡| 欧美大成色www永久网站婷| 国产精品电影网站| 欧美激情一区二区三区高清视频| 国产精品资源| 一本色道久久综合狠狠躁的推荐| 伊人久久大香线| 亚洲欧美日韩直播| 亚洲欧洲99久久| 欧美日韩国产在线播放网站| 免费久久精品视频| 国产亚洲欧美日韩美女| 中文一区在线| 亚洲网站在线播放| 欧美国产一区二区| 欧美h视频在线| 狠狠干综合网| 亚洲免费在线观看视频| 亚洲欧美成人在线| 欧美小视频在线| 一本色道久久加勒比精品| 日韩午夜电影| 欧美日韩国产精品自在自线| 亚洲第一在线| 亚洲黑丝一区二区| 嫩草国产精品入口| 欧美激情五月| 亚洲精品乱码久久久久久久久| 久久亚洲综合网| 欧美成人国产| 91久久精品国产91性色tv| 老鸭窝毛片一区二区三区| 欧美91大片| 91久久国产综合久久91精品网站| 鲁鲁狠狠狠7777一区二区| 欧美激情中文字幕在线| 亚洲精品国产欧美| 欧美日韩精品在线| 亚洲天堂av高清| 欧美在线一区二区三区| 国产一区二区丝袜高跟鞋图片| 久久九九热免费视频| 欧美成熟视频| 国产精品99久久久久久白浆小说| 国产精品成人播放| 欧美一级艳片视频免费观看| 欧美成人国产一区二区| 欧美不卡视频一区| 亚洲国产经典视频| 欧美黄色视屏| 亚洲伊人网站| 欧美成人在线免费观看| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲精品123区| 亚洲无亚洲人成网站77777| 国产精品美腿一区在线看| 欧美在线日韩| 亚洲人成高清| 久久精品国产亚洲高清剧情介绍| 精品成人一区二区| 欧美精品情趣视频| 先锋a资源在线看亚洲| 欧美国产日韩一区二区在线观看| 在线亚洲欧美视频| 狠狠色狠狠色综合人人| 欧美精品成人| 欧美影院成年免费版| 亚洲三级免费电影| 久久久精品999| 亚洲无线视频| 亚洲激情专区| 国产日韩精品一区二区浪潮av| 老色鬼精品视频在线观看播放| 一本一本久久| 欧美韩国日本综合| 欧美制服第一页| 亚洲天堂av在线免费| 亚洲国产成人久久综合一区| 国产精品免费在线 | 久久在线91| 亚洲女人小视频在线观看| 亚洲国产精品视频| 久久久久99| 香蕉免费一区二区三区在线观看| 亚洲日本成人在线观看| 国产综合色一区二区三区| 欧美视频不卡| 欧美美女bb生活片| 欧美福利在线观看| 久久五月婷婷丁香社区| 羞羞色国产精品| 亚洲一区二区综合|