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

poj 3525 Most Distant Point from the Sea

   這個題的題意是給定一個凸多邊形表示的海島,求海島離大海最遠的距離??梢赞D化為一個凸多邊形內部最多能夠放入一個多大的圓。
顯然可以對圓的半徑進行二分,但是怎么確定圓心了。確定是否存在圓心,可以把原來的凸多邊形往內部移動r(圓的半徑)的距離之后,
再對新的多邊形求半平面交,如果半平面交存在(是個點即可),那么當前大小的圓能夠放入。
   求半平面交的算法可以用上一篇中的N*N復雜度的基本算法。本題還涉及到一個知識,就是如何把一條直線往逆時針方向或者順時針方向
移動R的距離。其實,可以根據單位圓那種思路計算。因為相當于以原來直線上的一點為圓心,以r為半徑做圓,而且與原來的直線成90的夾
角,那么后來點的坐標是((x0 + cos(PI / 2 +θ )),(y0 + sin(PI / 2 + θ))),轉化一下就是(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是線段的長度。
   
   代碼如下:
#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));
}
//返回半平面的頂點個數
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) 評論(0)  編輯 收藏 引用 所屬分類: 計算幾何

<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學

網友

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美国产日本在线| 欧美在线观看视频一区二区三区 | 一本色道久久综合亚洲精品不| 国产精品无码专区在线观看| 欧美另类亚洲| 国产精品hd| 欧美人与性动交α欧美精品济南到| 欧美ed2k| 国产精品国码视频| 国产精品一区免费视频| 国产一区二区激情| 91久久精品国产91久久性色| 国产精品99久久久久久www| 亚洲欧美日韩国产| 久久看片网站| 亚洲人成在线观看网站高清| 亚洲国产成人av好男人在线观看| 欧美风情在线| 亚洲午夜一区二区三区| 久久精品视频免费观看| 欧美高清视频在线| 激情成人av在线| 亚洲欧美日本精品| 欧美精品一卡二卡| 一区二区三区欧美亚洲| 一区二区三区你懂的| 午夜亚洲性色福利视频| 亚洲尤物在线| 亚洲国产精品久久久| 99re8这里有精品热视频免费 | 麻豆精品精华液| 欧美三级视频在线观看| 亚洲动漫精品| 久久免费视频在线| 午夜精品婷婷| 国产一区日韩欧美| 久久久精品久久久久| 久久手机精品视频| 91久久精品美女| 久久综合中文| 99精品99| 亚洲国产天堂久久国产91| 欧美va亚洲va香蕉在线| 亚洲国产视频直播| 一本色道久久综合狠狠躁篇怎么玩| 欧美色大人视频| 亚洲一级电影| **性色生活片久久毛片| 亚洲乱码视频| 国产日本欧美在线观看| 老司机午夜精品视频| 欧美日韩三级一区二区| 亚洲免费婷婷| 牛夜精品久久久久久久99黑人 | 在线视频你懂得一区| 欧美精品国产一区| 欧美日韩综合在线| 欧美电影免费网站| 国产精品xxxxx| 欧美激情综合色| 国产精品中文在线| 欧美国产另类| 一色屋精品视频在线观看网站| 亚洲午夜视频在线| 亚洲国产精品第一区二区| 亚洲欧美日韩系列| 一区二区三区精品国产| 欧美肥婆在线| 欧美激情国产日韩| 亚洲国产美国国产综合一区二区| 中文国产成人精品久久一| 亚洲黄色影片| 久久久免费精品视频| 欧美一区二区三区视频免费播放 | 欧美午夜视频| 亚洲精品国产欧美| 亚洲视频精品| 国产一区二区三区四区在线观看| 亚洲色图在线视频| 亚洲欧美一区二区三区极速播放| 欧美va亚洲va国产综合| 国产精品九九| 欧美一级电影久久| 亚洲高清中文字幕| 亚洲精品乱码| 国产精品午夜在线| 久久久www成人免费无遮挡大片| 久久久噜噜噜久久狠狠50岁| 久久9热精品视频| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品三区www17con| 久久精品成人| 亚洲美女在线看| 午夜欧美大尺度福利影院在线看| 国产精品乱人伦中文| 久久久久国产一区二区| 99视频国产精品免费观看| 久久五月天婷婷| 亚洲欧美变态国产另类| 一区二区在线免费观看| 欧美亚州一区二区三区 | 中国成人黄色视屏| 国产欧美一区二区三区沐欲 | 亚洲福利在线视频| 狠狠入ady亚洲精品经典电影| 亚洲精品久久久久久久久| 亚洲欧美日韩久久精品| 亚洲激情电影在线| 在线精品一区二区| 国外精品视频| 国语自产精品视频在线看抢先版结局 | 亚洲国产小视频| 欧美激情一区二区三区四区 | 国产精品国产三级国产a| 久久精品视频免费观看| 亚洲在线中文字幕| 香蕉久久精品日日躁夜夜躁| 亚洲精品国产品国语在线app| 美日韩丰满少妇在线观看| 久久中文字幕导航| 久久久噜噜噜久久人人看| 免费观看久久久4p| 噜噜噜在线观看免费视频日韩 | 狠狠v欧美v日韩v亚洲ⅴ| 国产午夜精品理论片a级探花| 国内精品伊人久久久久av一坑| 黑人巨大精品欧美一区二区小视频| 国内揄拍国内精品少妇国语| 国产中文一区| 亚洲欧美日韩在线不卡| 久久久久亚洲综合| 亚洲精品偷拍| 久久裸体艺术| 欧美日韩在线播放三区四区| 国产精品日本| 亚洲网站在线观看| 可以免费看不卡的av网站| 久久午夜av| 午夜精品福利在线观看| 母乳一区在线观看| 亚洲高清不卡一区| 久久久久久综合| 日韩视频在线观看| 欧美日韩免费高清| 亚洲美女免费精品视频在线观看| 久久成人综合视频| 亚洲欧美日本视频在线观看| 欧美劲爆第一页| 一本色道久久88综合日韩精品| 久久久久天天天天| 亚洲影视在线播放| 国产女主播视频一区二区| 亚洲一区久久久| 欧美激情国产高清| 久久综合色影院| 久久免费一区| 日韩午夜视频在线观看| 日韩视频一区| 国产精品久久久99| 亚洲一卡久久| 国产精品99久久99久久久二8| 欧美日韩国产美女| 久久国产精品电影| 蜜臀va亚洲va欧美va天堂| 亚洲国产女人aaa毛片在线| 亚洲欧洲在线看| 国产日韩欧美不卡| 亚洲日本中文字幕| 国内精品99| 一本综合久久| 亚洲国产精品久久久| 亚洲图片欧洲图片日韩av| 亚洲国产日韩欧美在线图片| 亚洲视频狠狠| 91久久精品视频| 亚洲视频一二区| 日韩午夜在线| 欧美日韩dvd在线观看| 欧美成人高清| 韩国一区二区三区美女美女秀| 久久久久久久久久久成人| 欧美激情一区二区久久久| 欧美综合第一页| 国产精品拍天天在线| 99综合视频| 亚洲愉拍自拍另类高清精品| 久久综合给合| 亚洲成色www8888| 亚洲国产精品va在线观看黑人| 欧美在线视频免费观看| 久久青草久久| 韩国精品一区二区三区| 久久一二三四| 亚洲国产欧美久久| 亚洲一区二区三区四区五区午夜| 裸体一区二区三区| 亚洲国产高清高潮精品美女| 亚洲天堂偷拍| 激情综合色综合久久综合| 巨胸喷奶水www久久久免费动漫|