• <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精品国产综合久久婷婷| 国产精品va久久久久久久| 久久精品国产亚洲AV不卡| 亚洲国产另类久久久精品| 久久w5ww成w人免费| 久久艹国产| 嫩草影院久久99| 久久精品国产亚洲AV影院| 国产激情久久久久影院| 亚洲精品乱码久久久久久中文字幕 | 国产91久久综合| 亚洲人成精品久久久久| 久久国产视屏| 99久久精品国内| 国内精品久久九九国产精品| 国产精品久久久99| 精品免费久久久久久久| 思思久久精品在热线热| 久久久久一级精品亚洲国产成人综合AV区| 国产69精品久久久久观看软件| 国产精品美女久久久久av爽 | 国产精品成人久久久久三级午夜电影| 久久99久久99精品免视看动漫| 久久高潮一级毛片免费| 99久久精品这里只有精品| 久久国产精品成人免费| 久久国产色AV免费看| 久久综合88熟人妻| 一本一本久久A久久综合精品| 国内精品久久久久影院老司| 无码任你躁久久久久久老妇| 久久综合视频网站| 久久久久综合中文字幕| 欧美亚洲另类久久综合婷婷| 久久一区二区免费播放| 亚洲欧美精品一区久久中文字幕| 久久丝袜精品中文字幕| 欧美激情一区二区久久久| 国内精品伊人久久久久777| 亚洲精品无码久久久久sm| 久久99免费视频|