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

            oyjpArt ACM/ICPC算法程序設(shè)計(jì)空間

            // I am new in programming, welcome to my blog
            I am oyjpart(alpc12, 四城)
            posts - 224, comments - 694, trackbacks - 0, articles - 6

            PKU2504 Rounding Box

            Posted on 2008-05-04 14:41 oyjpart 閱讀(2708) 評論(3)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽
            前幾天的練習(xí)賽有一道計(jì)算幾何題,一向討厭計(jì)算幾何的我推了一下之后就沒做了。
            后來比賽結(jié)束的時(shí)候發(fā)現(xiàn)他們都過了,后悔不已。故做了一下,求三角形外接圓圓心那個(gè)我使用
            垂直平分線相交的那個(gè)做的。上次他們說有公式,我在書上找了個(gè)圓心公式,可是代進(jìn)去不對。
            估計(jì)是書上公式寫錯(cuò)了...
             Bounding box
            Time Limit: 1.0 Seconds   Memory Limit: 65536K
            Total Runs: 28   Accepted Runs: 14    Multiple test files



            The Archeologists of the Current Millenium (ACM) now and then discover ancient artifacts located at vertices of regular polygons. The moving sand dunes of the desert render the excavations difficult and thus once three vertices of a polygon are discovered there is a need to cover the entire polygon with protective fabric.

            Input contains multiple cases. Each case describes one polygon. It starts with an integer n ≤ 50, the number of vertices in the polygon, followed by three pairs of real numbers giving the x and y coordinates of three vertices of the polygon. The numbers are separated by whitespace. The input ends with a n equal 0, this case should not be processed.

            For each line of input, output one line in the format shown below, giving the smallest area of a rectangle which can cover all the vertices of the polygon and whose sides are parallel to the x and y axes.

            Sample input

            4
            10.00000 0.00000
            0.00000 -10.00000
            -10.00000 0.00000
            6
            22.23086 0.42320
            -4.87328 11.92822
            1.76914 27.57680
            23
            156.71567 -13.63236
            139.03195 -22.04236
            137.96925 -11.70517
            0

            Output for the sample input

            Polygon 1: 400.000
            Polygon 2: 1056.172
            Polygon 3: 397.673

            // solution by alpc12
            #include <cstdio>
            #include <cmath>

            const double EPS = 1e-8;
            const double PI = acos(-1.0);
            const double INF = 1e100;

            #define Min(a, b) (a<b?a:b)
            #define Max(a, b) (a>b?a:b)

            struct Point {
                double x;
                double y;
                Point() {}
                Point(double xx, double yy) {
                    x = xx;
                    y = yy;
                }
            };

            struct Line {
                double a, b, c;
                Point st, end;
                Line() {}
                Line(Point& u, Point& v) {
                    st = u;
                    end = v;
                    a = v.y - u.y;
                    b = u.x - v.x;
                    c = a*u.x + b*u.y;
                }
            };

            #define sqr(a) ((a)*(a))
            #define dist(a, b) (sqrt( sqr((a).x-(b).x)+sqr((a).y-(b).y) ))
            #define cross(a, b, c)  (((b).x-(a).x)*((c).y-(a).y)-((b).y-(a).y)*((c).x-(a).x))

            inline int dblcmp(double a, double b = 0.0) {
                if(fabs(a-b) < EPS) return 0;
                return a < b ? -1 : 1;
            }

            Line bisector(Point& a, Point& b) {
                Line line(a, b), ans;    
                double midx = (a.x+b.x)/2, midy = (a.y+b.y)/2;
                ans.a = -line.b, ans.b = line.a, ans.c = ans.a*midx + ans.b*midy;
                return ans;
            }

            int line_line_intersect(Line& l1, Line& l2, Point& s) {
                double det = l1.a * l2.b - l2.a * l1.b;
                if(dblcmp(det) == 0) {
                    return -1;
                }
                s.x = (l2.b*l1.c - l1.b*l2.c) / det;
                s.y = (l1.a*l2.c - l2.a*l1.c) / det;
                return 1;
            }

            int center_3point(Point& a, Point& b, Point& c, Point& s, double& r) {
                Line x = bisector(a, b), y = bisector(b, c);
                if(line_line_intersect(x, y, s) == 1) {
                    r = dist(s, a);
                    return 1;
                }
                return 0;
            }

            Point p[55];

            int main() {

                //freopen("t.in", "r", stdin);

                int i, n, tc = 0;
                Point cent;
                while(scanf("%d", &n), n) {
                    for(i = 0; i < 3; ++i) scanf("%lf %lf ", &p[i].x, &p[i].y);
                    double r;
                    if(center_3point(p[0], p[1], p[2], cent, r) == 1) {
                        for(i = 0; i < 3; ++i)
                            p[i].x -= cent.x, p[i].y -= cent.y;
                    }
                    double alpha = acos(p[0].x / r);
                    double theta = 2 * PI / n;
                    double xmin = INF, xmax = -INF, ymin = INF, ymax = -INF;
                    for(i = 0; i < n; ++i) {
                        p[i] = Point(r * cos(alpha + i * theta),
                            r * sin(alpha + i * theta));
                        xmin = Min(xmin, p[i].x);
                        xmax = Max(xmax, p[i].x);
                        ymin = Min(ymin, p[i].y);
                        ymax = Max(ymax, p[i].y);
                    }
                    printf("Polygon %d: %.3lf\n", ++tc, (xmax-xmin)*(ymax-ymin));
                }
                return 0;
            }

            Feedback

            # re: PKU2504 Rounding Box  回復(fù)  更多評論   

            2008-05-05 09:02 by oyjpart
            那個(gè)大牛給我個(gè)正確的求圓心的坐標(biāo)的公式?

            # re: PKU2504 Rounding Box  回復(fù)  更多評論   

            2008-05-05 12:21 by alpc55
            @oyjpart
            想要嗎~~~
            我有哈~~~

            # re: PKU2504 Rounding Box  回復(fù)  更多評論   

            2008-05-05 14:35 by oyjpart
            謝謝啊
            亚洲?V乱码久久精品蜜桃| 久久99精品久久久久久水蜜桃| 九九精品99久久久香蕉| 国内精品伊人久久久久AV影院| 久久国产成人| 久久久久久久久66精品片| 久久天天躁狠狠躁夜夜躁2O2O| 一本色道久久88—综合亚洲精品| 亚洲国产精品一区二区久久hs| 国产高潮国产高潮久久久| 久久精品国产69国产精品亚洲| 久久亚洲精品国产精品婷婷| 亚洲精品乱码久久久久久中文字幕| 精品久久久久久中文字幕人妻最新| 国内精品久久久久久久久电影网| 久久中文字幕人妻丝袜| 国产精品久久久久…| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久成人精品视频| 九九精品久久久久久噜噜| 久久国产高清字幕中文| 精品久久久中文字幕人妻| 亚洲国产成人久久精品影视| 一本久久a久久精品亚洲| 久久精品女人天堂AV麻| 日本一区精品久久久久影院| 久久久婷婷五月亚洲97号色 | 日本免费一区二区久久人人澡 | 香蕉99久久国产综合精品宅男自| 久久久久亚洲精品天堂| 伊人色综合久久天天人守人婷| 国内精品久久久久久久涩爱| MM131亚洲国产美女久久| 人妻精品久久无码专区精东影业| 日本精品久久久久影院日本| 亚洲国产天堂久久综合网站| 久久se精品一区二区| 久久精品国产69国产精品亚洲| 久久婷婷五月综合国产尤物app| 亚洲AⅤ优女AV综合久久久| 精品国产91久久久久久久a|