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

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

            導航

            統計

            公告

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            me

            好友

            同學

            網友

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久不见久久见免费视频7| 亚洲国产精品久久久久婷婷软件| 久久久久18| 国产精品久久久久久久人人看 | 久久久精品人妻一区二区三区蜜桃| 久久亚洲国产成人精品性色| 97久久超碰国产精品2021| 国产一区二区三精品久久久无广告 | 国产精品成人久久久| 久久国产精品成人片免费| 久久国产精品99精品国产987| 久久久久久久久久免免费精品| 无码AV波多野结衣久久| 欧美伊人久久大香线蕉综合69| 久久久久免费看成人影片| 伊人色综合久久天天网| 嫩草影院久久99| 97久久婷婷五月综合色d啪蜜芽| 精品综合久久久久久97超人| 成人精品一区二区久久| 久久久久久综合一区中文字幕| 99久久精品免费观看国产| 99久久伊人精品综合观看| 大蕉久久伊人中文字幕| 久久精品人妻中文系列| 久久99精品久久久久久秒播| 久久久久se色偷偷亚洲精品av| www亚洲欲色成人久久精品| 偷偷做久久久久网站| 久久免费国产精品一区二区| 色综合久久中文字幕综合网| 日韩精品久久久久久免费| 伊人热热久久原色播放www| 久久免费精品视频| 久久久噜噜噜久久中文福利| 久久伊人色| 亚洲国产成人久久综合一| 午夜精品久久久久久久久| 亚洲伊人久久综合影院| 久久人妻少妇嫩草AV无码蜜桃| 久久精品亚洲精品国产色婷|