• <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>

            poj 3348 Cows

               這個題用到2個計算幾何算法。求解凸包和簡單多邊形面積。凸包算法詳細(xì)解釋見算法導(dǎo)論。求解多邊形面積的思想是將多邊形分解為三角
            形,一般是假設(shè)按順序取多邊形上面連續(xù)的2點與原點組合成一個三角形,依次下去用叉積求有向面積之和,最后取絕對值即可。注意,這些
            點必須是在多邊形上逆時針或者順時針給出的,而求出凸包剛好給了這樣的一系列點。
               凸包代碼,其實先找出一個y坐標(biāo)最小的點,再對剩下的所有點按極角排序。然后對排序后的點進(jìn)行一個二維循環(huán)即可。二維循環(huán)的解釋是
            當(dāng)加入新的點進(jìn)入凸包集合時候,如果與以前加入的點形成的偏轉(zhuǎn)方向不一致,那么前面那些點都需要彈出集合。

               代碼如下:
            #include <stdio.h>
            #include <string.h>
            #include <algorithm>
            #include <math.h>
            using namespace std;
            #define MAX_N (10000 + 10)

            struct Point
            {
                double x, y;
                bool operator <(const Point& p) const
                {
                    return y < p.y || y == p.y && x < p.x;
                }
            };

            Point pts[MAX_N];
            int nN;
            Point ans[MAX_N];
            int nM;

            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);
            }

            bool CrossCmp(const Point& a, const Point& b)
            {
                double cs = Cross(pts[0], a, b);
                return cs > 0 || cs == 0 && a.x < b.x; 
            }

            void Scan()
            {
                nM = 0;
                sort(pts + 1, pts + nN, CrossCmp);//對所有點按極角排序,逆時針偏轉(zhuǎn)
                
                
            //第0-2個點,其實不會進(jìn)入第二重循環(huán)的
                
            //從第3個點開始,就依次檢查與凸包中前面點形成的邊的偏轉(zhuǎn)方向
                
            //如果不是逆時針偏轉(zhuǎn),則彈出該點
                for (int i = 0; i < nN; ++i)
                {
                    while (nM >= 2 && Cross(ans[nM - 2], ans[nM - 1], pts[i]) <= 0)
                    {
                        nM--;
                    }
                    ans[nM++] = pts[i];
                }
            }

            double GetArea()
            {
                double fAns = 0.0;
                Point ori = {0.0, 0.0};
                for (int i = 0; i < nM; ++i)
                {
                    fAns += Cross(ori, ans[i], ans[(i + 1) % nM]);
                }
                return fabs(fAns) * 0.5;
            }

            int main()
            {
                while (scanf("%d", &nN) == 1)
                {
                    for (int i = 0; i < nN; ++i)
                    {
                        scanf("%lf%lf", &pts[i].x, &pts[i].y);
                        if (pts[i] < pts[0])
                        {
                            swap(pts[i], pts[0]);//pts[0]是y坐標(biāo)最小的點
                        }
                    }
                    
                    Scan();//掃描出凸包
                    double fArea = GetArea();
                    printf("%d\n", (int)(fArea / 50));
                }
                
                return 0;
            }

            posted on 2012-07-18 20:28 yx 閱讀(1082) 評論(0)  編輯 收藏 引用 所屬分類: 計算幾何

            <2012年10月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            導(dǎo)航

            統(tǒng)計

            公告

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            me

            好友

            同學(xué)

            網(wǎng)友

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品岛国久久久久| 91精品国产91久久久久久| 亚洲国产精品综合久久一线| 久久综合九色综合欧美就去吻| 久久综合九色欧美综合狠狠| 精品国际久久久久999波多野| 情人伊人久久综合亚洲| 久久WWW免费人成一看片| 亚洲欧美日韩精品久久| 日本欧美久久久久免费播放网| 91久久成人免费| 日本久久久久亚洲中字幕| 久久精品国产欧美日韩99热| 国产免费久久精品丫丫| 精品久久久久久无码专区| 欧美精品乱码99久久蜜桃| 国产精品99久久久久久宅男| 69国产成人综合久久精品| 99久久精品免费看国产一区二区三区 | 久久无码精品一区二区三区| 久久久久亚洲AV无码永不| 狠狠色丁香久久婷婷综合_中| 国产叼嘿久久精品久久| 久久夜色tv网站| 久久精品免费一区二区三区| 国产亚洲色婷婷久久99精品| 亚洲女久久久噜噜噜熟女| 亚洲熟妇无码另类久久久| 久久精品国产2020| 久久午夜夜伦鲁鲁片免费无码影视| 久久天天躁狠狠躁夜夜2020| 久久久久久亚洲精品不卡| 久久综合久久伊人| 欧美国产精品久久高清| 香蕉99久久国产综合精品宅男自| 久久一区二区三区免费| 国产精品99久久久精品无码| 无码人妻久久一区二区三区蜜桃 | 国产激情久久久久影院老熟女免费 | 亚洲七七久久精品中文国产| 青春久久|