• <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 閱讀(1070) 評論(0)  編輯 收藏 引用 所屬分類: 計算幾何

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

            導航

            統計

            公告

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            me

            好友

            同學

            網友

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            91久久精品视频| 日韩精品久久无码人妻中文字幕| 99久久中文字幕| 久久www免费人成看国产片| 伊人久久精品影院| 99久久无色码中文字幕| 久久只这里是精品66| 久久精品国产精品亚洲精品| 色婷婷噜噜久久国产精品12p| 久久精品国产亚洲av麻豆色欲 | 伊人色综合久久天天网| 久久66热人妻偷产精品9| 久久强奷乱码老熟女网站| 国产精品久久久久影院嫩草| 久久无码人妻精品一区二区三区| 久久精品国产亚洲AV麻豆网站| 日本欧美国产精品第一页久久| 97久久香蕉国产线看观看| 亚洲国产精品无码久久久久久曰| 成人综合伊人五月婷久久| 思思久久99热只有频精品66| 国产91久久综合| 色综合久久中文综合网| 久久免费的精品国产V∧| 国产A三级久久精品| 思思久久99热免费精品6| 久久国产午夜精品一区二区三区| 久久久久免费看成人影片| 久久夜色精品国产噜噜亚洲a| 狠狠色综合网站久久久久久久| 国产麻豆精品久久一二三| 国产成人精品综合久久久| 影音先锋女人AV鲁色资源网久久 | 久久精品国产国产精品四凭| 99久久无色码中文字幕| 亚洲va久久久噜噜噜久久| 欧美午夜精品久久久久免费视| 色婷婷综合久久久久中文 | 久久久久波多野结衣高潮| 四虎国产精品成人免费久久| 久久久综合香蕉尹人综合网|