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

               代碼如下:
            #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);//對所有點按極角排序,逆時針偏轉
                
                
            //第0-2個點,其實不會進入第二重循環的
                
            //從第3個點開始,就依次檢查與凸包中前面點形成的邊的偏轉方向
                
            //如果不是逆時針偏轉,則彈出該點
                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坐標最小的點
                        }
                    }
                    
                    Scan();//掃描出凸包
                    double fArea = GetArea();
                    printf("%d\n", (int)(fArea / 50));
                }
                
                return 0;
            }

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

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

            導航

            統計

            公告

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            me

            好友

            同學

            網友

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            日本精品一区二区久久久| 91秦先生久久久久久久| 伊人久久大香线蕉av一区| 久久久久久伊人高潮影院| 久久久久99精品成人片试看| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久er国产精品免费观看8| 无码人妻久久一区二区三区蜜桃| 精品久久人人爽天天玩人人妻| 久久777国产线看观看精品| 色综合久久中文字幕综合网| 久久久久久国产精品免费无码 | 久久亚洲中文字幕精品一区| 久久精品国产一区二区电影| 伊人久久大香线蕉亚洲| 青青草原综合久久大伊人导航| 久久99精品久久久久久动态图| 久久露脸国产精品| 国产精品成人久久久久久久| 久久久精品2019免费观看| 久久午夜无码鲁丝片秋霞| 精品无码久久久久久久久久| 久久精品国产91久久麻豆自制| 中文字幕久久精品无码| 久久午夜免费视频| 久久久久一本毛久久久| 久久91这里精品国产2020| 久久精品国产亚洲av高清漫画| 99久久这里只精品国产免费| 久久久久久亚洲精品不卡 | 国产伊人久久| 久久精品国产亚洲沈樵| 93精91精品国产综合久久香蕉| 久久久久亚洲AV无码永不| 浪潮AV色综合久久天堂| 国内精品九九久久久精品| 久久人妻少妇嫩草AV无码专区| 亚洲人成精品久久久久| 久久婷婷五月综合97色一本一本| 久久亚洲AV成人出白浆无码国产| 日韩AV无码久久一区二区|