zoukankan      html  css  js  c++  java
  • POJ 3449 Geometric Shapes --计算几何,线段相交

    题意: 给一些多边形或线段,输出与每一个多边形或线段的有哪一些多边形或线段。

    解法: 想法不难,直接暴力将所有的图形处理成线段,然后暴力枚举,相交就加入其vector就行了。主要是代码有点麻烦,一步一步来吧。

    还有收集了一个线段旋转的函数。

    给定正方形对角求其他两点用到了线段旋转。

    Vector Rotate(Point P,Vector A,double rad){     //以P为基准点把向量A旋转rad
        return Vector(P.x+A.x*cos(rad)-A.y*sin(rad),P.y+A.x*sin(rad)+A.y*cos(rad));
    }

    从POJ Discuss上面搞了一点数据下来:

    【input】
    
    Z line (1933,2413) (2607,388)
    A square (2434,925) (2065,1534)
    R polygon 5 (1251,2398) (-1319,-569) (1964,-1947) (1705,2845) (-994,-551)
    V line (2689,2103) (-1350,457)
    P line (-121,-709) (-937,1486)
    S rectangle (377,-24) (441,-258) (1845,-642)
    B triangle (-1820,1247) (566,964) (1564,1972)
    T line (-670,2470) (-395,1531)
    L triangle (-1466,969) (-239,1757) (2848,2404)
    M rectangle (-242,202) (63,-413) (3753,-2243)
    N line (-1507,42) (-1804,1740)
    O square (304,-715) (534,1418)
    C line (-1977,499) (1868,83)
    Q square (-1804,-210) (-315,2600)
    -
    D line (-1336,-714) (-1702,308)
    K line (2153,1486) (-138,893)
    H square (-450,-1268) (-1739,2968)
    C rectangle (-157,-301) (337,278) (-1400,-1204)
    M line (1374,1711) (-1074,2984)
    W rectangle (149,221) (-361,-191) (463,829)
    T square (651,-980) (707,1451)
    Z rectangle (35,-140) (429,-265) (679,-1053)
    E line (2167,2402) (-1630,-807)
    A rectangle (-243,-493) (-419,191) (-2471,719)
    F rectangle (136,-109) (429,-59) (329,-645)
    G line (1912,1384) (560,2522)
    I triangle (803,-1493) (1250,428) (-1355,1769)
    Q line (-686,1911) (2760,1923)
    N line (967,-1234) (-77,2731)
    -
    Q polygon 7 (19,407) (-146,774) (74,1867) (2970,2297) (165,-1021) (-1567,-1801) (-1099,443)
    A rectangle (-243,-183) (-312,-2) (-674,136)
    K triangle (-695,1986) (905,-1405) (-211,-1490)
    J square (530,1487) (118,-1696)
    X square (-374,-790) (2502,1957)
    S line (2859,-1561) (2557,2955)
    E rectangle (-5,-305) (-147,-251) (-363,317)
    O triangle (-625,-1042) (1377,-115) (37,1641)
    F rectangle (259,-429) (289,-404) (139,-584)
    -
    W square (996,-1997) (2218,2787)
    X polygon 3 (787,1020) (-969,-1508) (2270,2500)
    T square (-1125,-187) (-1414,2113)
    K square (2880,-1273) (2986,304)
    E rectangle (205,368) (236,212) (1016,57)
    Y square (-1996,-1348) (-1545,1840)
    V polygon 10 (-543,1468) (1328,2443) (2619,806) (2353,1091) (2447,570) (2837,-1825) (-1857,-1586) (-331,625) (-1113,-1502) (197,574)
    Z polygon 8 (-156,1249) (-133,1674) (-1392,1042) (2105,-957) (2912,1975) (1195,2697) (1082,-64) (1081,681)
    B polygon 11 (2391,-1682) (2569,1841) (2316,804) (1625,92) (823,1035) (612,1308) (-1664,2716) (-1363,-460) (1971,-1782) (-1194,35) (-699,573)
    A rectangle (-371,-235) (9,363) (-3579,-1917)
    U rectangle (307,-40) (-159,-500) (2141,1830)
    H triangle (-780,2320) (1012,-1816) (1980,1349)
    C square (-759,1872) (2836,1399)
    D rectangle (472,83) (78,-46) (723,1924)
    F square (-384,229) (736,-577)
    G rectangle (-77,317) (426,-100) (1260,-1106)
    Q triangle (-778,579) (-1534,474) (196,-293)
    S square (-1893,-690) (2521,431)
    R line (1885,-1907) (2891,-1798)
    I square (2291,2484) (2162,-1280)
    J line (2999,1660) (721,1597)
    L triangle (-824,-757) (769,1373) (950,-180)
    M rectangle (-370,-221) (341,-125) (53,-2258)
    -
    Q polygon 12 (-242,643) (447,350) (-1396,1043) (-1264,126) (-473,-963) (2475,-1568) (1870,-1091) (1190,50) (669,2183) (1776,1305) (833,2334) (-676,1920)
    X line (-383,836) (592,155)
    K square (2799,-129) (1052,-245)
    Y polygon 4 (2145,-823) (2708,2578) (-1952,-1383) (2120,98)
    Z polygon 13 (2098,-1112) (2036,-1014) (1174,-1851) (640,-1658) (739,-725) (-700,-1844) (-629,-1083) (596,1095) (-94,-207) (94,-1100) (1594,1569) (1604,-528) (2158,149)
    C polygon 9 (144,2825) (-1637,857) (502,292) (-463,-1422) (1411,-1399) (2525,-304) (2444,2672) (1494,2284) (1832,2775)
    F polygon 7 (2935,828) (1354,2770) (-1218,94) (2482,1107) (841,855) (-17,908) (1532,1742)
    A square (835,-944) (1100,2163)
    U polygon 11 (1460,964) (1461,2840) (328,1658) (-70,876) (295,1377) (1366,2643) (-274,123) (-492,789) (833,2817) (-1407,395) (-1889,-733)
    G rectangle (214,146) (-195,62) (225,2107)
    D polygon 9 (754,-1107) (-1781,48) (569,1700) (1268,2019) (1862,724) (2589,-1323) (1157,1865) (1282,-178) (422,254)
    -
    P polygon 11 (-728,2666) (1962,2817) (1123,291) (235,1939) (1372,-477) (-1133,-689) (-1054,-1382) (-521,-1179) (522,-1582) (-1935,-1361) (318,845)
    O triangle (2168,1629) (1926,1507) (1645,2840)
    G rectangle (358,132) (-414,-167) (184,1377)
    M square (-353,-803) (-509,2311)
    K line (-1210,965) (-1016,-792)
    E triangle (2878,1579) (2969,-1407) (748,2950)
    X square (1596,-1289) (1278,2865)
    -
    E square (-98,-814) (-1374,527)
    X polygon 5 (598,-184) (-1979,-302) (-234,-1108) (2306,-1638) (-397,1936)
    O rectangle (-302,384) (-73,236) (667,-909)
    M square (685,-1324) (-878,-347)
    I polygon 12 (1328,150) (492,-1801) (1774,-101) (2613,1777) (545,1108) (-765,1653) (25,2299) (-1428,2967) (-1014,272) (-1412,28) (2149,1361) (-345,-1171)
    C square (-699,-1701) (-1564,415)
    D line (2565,-666) (-1685,1340)
    N polygon 12 (2824,1092) (1730,392) (1820,1654) (853,1092) (-957,1834) (1520,-1461) (-600,-623) (-97,-960) (-1933,-1920) (-1841,2538) (2656,1754) (2737,1410)
    P line (1752,-1990) (-1944,-1653)
    Y triangle (2792,-1185) (1624,2964) (-1179,-523)
    -
    U polygon 11 (2042,1312) (480,913) (2225,633) (646,-843) (357,-278) (-988,1486) (-1622,-1297) (-1890,2941) (-1055,2398) (2353,2712) (-360,1116)
    O square (-1014,323) (293,-1208)
    B triangle (529,-411) (-1412,-1990) (2503,2813)
    H line (322,-648) (-1776,1334)
    E rectangle (-110,-199) (395,-165) (259,-2185)
    Q rectangle (-161,-135) (-231,-411) (321,-271)
    P rectangle (-5,-360) (-491,-476) (-143,982)
    -
    O square (2411,-1619) (-562,1085)
    I square (-580,924) (1616,-190)
    X polygon 4 (2110,-857) (-1269,1251) (-1848,-1245) (-315,-898)
    U square (-135,1875) (412,2950)
    Z triangle (-630,-762) (2043,2532) (-185,259)
    Y rectangle (223,-223) (264,-244) (348,-408)
    -
    G triangle (2020,-1129) (156,2172) (978,-1807)
    C square (2815,1491) (-1652,228)
    O rectangle (155,-336) (47,-450) (275,-234)
    J rectangle (-70,-341) (-116,208) (-1214,300)
    K polygon 11 (-1731,557) (1333,-1555) (1420,-157) (77,-539) (98,932) (2645,998) (2884,2095) (2491,-958) (1492,-1027) (1294,-1742) (-1399,-556)
    H square (-1742,-1851) (1394,780)
    Z triangle (775,1442) (-521,460) (1887,-749)
    D rectangle (212,-98) (-252,209) (-559,673)
    R rectangle (-256,27) (148,69) (-104,-2355)
    W triangle (1617,2635) (542,1875) (2785,-1064)
    A triangle (2858,-1217) (2104,-663) (1243,991)
    U square (-1692,-348) (-1698,-92)
    L square (41,2517) (2946,-1079)
    T square (1094,2127) (37,-288)
    X rectangle (87,-248) (368,95) (-661,-748)
    M triangle (2666,2416) (1974,2009) (1356,873)
    B line (1175,578) (1074,2230)
    F rectangle (28,392) (313,-104) (2297,-1244)
    I polygon 6 (-1403,-1004) (-548,-1972) (-10,-651) (2168,-1142) (1268,2669) (902,2117)
    N triangle (2586,116) (329,1299) (2801,1527)
    Y square (511,1750) (-1539,-1789)
    P polygon 8 (887,1982) (-1247,2002) (-1879,-1626) (2562,-145) (-346,-131) (2295,194) (-377,460) (2244,2935)
    Q square (1719,975) (1858,-1099)
    E square (2468,-1370) (2817,1254)
    S square (1221,2873) (-1496,-1673)
    V triangle (-1299,2790) (1833,1707) (1012,1128)
    -
    .
    
    
    
    【output】
    A intersects with Z
    B intersects with L, N, O, P, Q, R, T, and V
    C intersects with N, O, P, Q, and R
    L intersects with B, P, Q, R, T, and Z
    M intersects with O, R, and S
    N intersects with B and C
    O intersects with B, C, M, P, Q, R, S, and V
    P intersects with B, C, L, O, Q, R, and V
    Q intersects with B, C, L, O, P, R, and V
    R intersects with B, C, L, M, O, P, Q, and V
    S intersects with M and O
    T intersects with B and L
    V intersects with B, O, P, Q, R, and Z
    Z intersects with A, L, and V
    
    A intersects with C, D, E, T, and W
    C intersects with A, H, I, and T
    D intersects with A and E
    E intersects with A, D, G, H, I, K, M, N, Q, and T
    F intersects with H, I, T, and Z
    G intersects with E, K, and Q
    H intersects with C, E, F, I, K, N, Q, T, W, and Z
    I intersects with C, E, F, H, K, N, T, W, and Z
    K intersects with E, G, H, I, N, T, and W
    M intersects with E, N, and Q
    N intersects with E, H, I, K, M, Q, T, and W
    Q intersects with E, G, H, M, and N
    T intersects with A, C, E, F, H, I, K, N, W, and Z
    W intersects with A, H, I, K, N, and T
    Z intersects with F, H, I, and T
    
    A intersects with K, O, and X
    E intersects with O and X
    F has no intersections
    J intersects with K, O, Q, and X
    K intersects with A, J, O, Q, and X
    O intersects with A, E, J, K, Q, and X
    Q intersects with J, K, O, S, and X
    S intersects with Q
    X intersects with A, E, J, K, O, and Q
    
    A intersects with B, F, G, L, M, Q, S, V, W, Y, and Z
    B intersects with A, C, D, F, G, H, I, J, K, L, M, Q, S, T, U, V, W, X, Y, and Z
    C intersects with B, D, E, F, H, I, J, L, S, T, U, V, W, X, and Z
    D intersects with B, C, E, F, G, H, I, J, L, S, U, W, X, and Z
    E intersects with C, D, F, I, L, U, and X
    F intersects with A, B, C, D, E, G, H, L, M, Q, U, V, W, X, Y, and Z
    G intersects with A, B, D, F, H, L, M, U, V, X, and Z
    H intersects with B, C, D, F, G, I, J, L, M, S, T, U, V, W, X, and Z
    I intersects with B, C, D, E, H, J, K, L, S, U, V, W, X, and Z
    J intersects with B, C, D, H, I, U, V, W, X, and Z
    K intersects with B, I, V, W, and Z
    L intersects with A, B, C, D, E, F, G, H, I, M, Q, U, V, W, X, Y, and Z
    M intersects with A, B, F, G, H, L, Q, S, U, V, W, and X
    Q intersects with A, B, F, L, M, S, T, U, V, W, X, and Y
    R intersects with V
    S intersects with A, B, C, D, H, I, M, Q, T, U, V, W, X, Y, and Z
    T intersects with B, C, H, Q, S, V, W, Y, and Z
    U intersects with B, C, D, E, F, G, H, I, J, L, M, Q, S, V, W, X, and Z
    V intersects with A, B, C, F, G, H, I, J, K, L, M, Q, R, S, T, U, W, X, Y, and Z
    W intersects with A, B, C, D, F, H, I, J, K, L, M, Q, S, T, U, V, X, Y, and Z
    X intersects with B, C, D, E, F, G, H, I, J, L, M, Q, S, U, V, W, and Z
    Y intersects with A, B, F, L, Q, S, T, V, W, and Z
    Z intersects with A, B, C, D, F, G, H, I, J, K, L, S, T, U, V, W, X, and Y
    
    A intersects with C, D, F, G, K, Q, U, Y, and Z
    C intersects with A, D, F, G, K, Q, U, X, Y, and Z
    D intersects with A, C, F, G, K, Q, U, X, Y, and Z
    F intersects with A, C, D, G, Q, U, X, Y, and Z
    G intersects with A, C, D, F, Q, U, X, Y, and Z
    K intersects with A, C, D, Q, Y, and Z
    Q intersects with A, C, D, F, G, K, U, X, Y, and Z
    U intersects with A, C, D, F, G, Q, X, Y, and Z
    X intersects with C, D, F, G, Q, U, Y, and Z
    Y intersects with A, C, D, F, G, K, Q, U, X, and Z
    Z intersects with A, C, D, F, G, K, Q, U, X, and Y
    
    E intersects with O, P, and X
    G intersects with M, P, and X
    K intersects with M and P
    M intersects with G, K, P, and X
    O intersects with E, P, and X
    P intersects with E, G, K, M, O, and X
    X intersects with E, G, M, O, and P
    
    C intersects with E, I, M, N, X, and Y
    D intersects with I, N, X, and Y
    E intersects with C, I, M, N, O, X, and Y
    I intersects with C, D, E, M, N, O, X, and Y
    M intersects with C, E, I, N, O, X, and Y
    N intersects with C, D, E, I, M, P, X, and Y
    O intersects with E, I, M, X, and Y
    P intersects with N
    X intersects with C, D, E, I, M, N, O, and Y
    Y intersects with C, D, E, I, M, N, O, and X
    
    B intersects with E, H, O, P, Q, and U
    E intersects with B, H, O, P, Q, and U
    H intersects with B, E, O, P, Q, and U
    O intersects with B, E, H, P, Q, and U
    P intersects with B, E, H, O, Q, and U
    Q intersects with B, E, H, O, P, and U
    U intersects with B, E, H, O, P, and Q
    
    I intersects with O, X, and Z
    O intersects with I, X, and Z
    U has no intersections
    X intersects with I, O, and Z
    Y has no intersections
    Z intersects with I, O, and X
    
    A intersects with C, E, H, I, K, L, N, P, Q, S, T, and W
    B intersects with H, K, N, P, T, V, W, and Z
    C intersects with A, E, F, G, H, I, J, K, L, M, N, P, Q, R, S, V, W, X, Y, and Z
    D intersects with I, J, K, L, P, R, T, X, and Z
    E intersects with A, C, F, H, I, K, L, N, P, Q, S, T, W, and Z
    F intersects with C, E, G, H, I, K, L, O, P, Q, S, T, X, Y, and Z
    G intersects with C, F, H, I, K, L, N, P, Q, S, T, V, Y, and Z
    H intersects with A, B, C, E, F, G, I, K, L, N, P, Q, R, S, T, U, W, Y, and Z
    I intersects with A, C, D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, Y, and Z
    J intersects with C, D, I, K, L, P, R, T, and X
    K intersects with A, B, C, D, E, F, G, H, I, J, L, M, N, O, P, Q, R, S, T, W, X, Y, and Z
    L intersects with A, C, D, E, F, G, H, I, J, K, M, P, Q, R, S, T, V, W, X, Y, and Z
    M intersects with C, I, K, L, N, S, T, V, and W
    N intersects with A, B, C, E, G, H, I, K, M, P, Q, S, T, V, W, Y, and Z
    O intersects with F, K, P, R, and T
    P intersects with A, B, C, D, E, F, G, H, I, J, K, L, N, O, Q, R, S, T, U, V, W, X, Y, and Z
    Q intersects with A, C, E, F, G, H, I, K, L, N, P, S, T, W, Y, and Z
    R intersects with C, D, H, I, J, K, L, O, P, S, T, X, and Y
    S intersects with A, C, E, F, G, H, I, K, L, M, N, P, Q, R, V, W, and Y
    T intersects with A, B, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, V, W, X, Y, and Z
    U intersects with H and P
    V intersects with B, C, G, I, L, M, N, P, S, T, W, Y, and Z
    W intersects with A, B, C, E, H, I, K, L, M, N, P, Q, S, T, and V
    X intersects with C, D, F, J, K, L, P, R, T, and Z
    Y intersects with C, F, G, H, I, K, L, N, P, Q, R, S, T, V, and Z
    Z intersects with B, C, D, E, F, G, H, I, K, L, N, P, Q, T, V, X, and Y
    View Code

    ---------------------------------------------------------------------

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #define pi acos(-1.0)
    #define eps 1e-8
    using namespace std;
    
    struct Point{
        double x,y;
        Point(double x=0, double y=0):x(x),y(y) {}
        void input() { scanf("%lf%lf",&x,&y); }
    };
    typedef Point Vector;
    struct Line{
        Point p;
        Vector v;
        double ang;
        Line(){}
        Line(Point p, Vector v):p(p),v(v) { ang = atan2(v.y,v.x); }
        Point point(double t) { return Point(p.x + t*v.x, p.y + t*v.y); }
        bool operator < (const Line &L)const { return ang < L.ang; }
    };
    int dcmp(double x) {
        if(x < -eps) return -1;
        if(x > eps) return 1;
        return 0;
    }
    template <class T> T sqr(T x) { return x * x;}
    Vector operator + (Vector A, Vector B) { return Vector(A.x + B.x, A.y + B.y); }
    Vector operator - (Vector A, Vector B) { return Vector(A.x - B.x, A.y - B.y); }
    Vector operator * (Vector A, double p) { return Vector(A.x*p, A.y*p); }
    Vector operator / (Vector A, double p) { return Vector(A.x/p, A.y/p); }
    bool operator < (const Point& a, const Point& b) { return a.x < b.x || (a.x == b.x && a.y < b.y); }
    bool operator >= (const Point& a, const Point& b) { return a.x >= b.x && a.y >= b.y; }
    bool operator <= (const Point& a, const Point& b) { return a.x <= b.x && a.y <= b.y; }
    bool operator == (const Point& a, const Point& b) { return dcmp(a.x-b.x) == 0 && dcmp(a.y-b.y) == 0; }
    double Dot(Vector A, Vector B) { return A.x*B.x + A.y*B.y; }
    double Length(Vector A) { return sqrt(Dot(A, A)); }
    double Angle(Vector A, Vector B) { return acos(Dot(A, B) / Length(A) / Length(B)); }
    double Cross(Vector A, Vector B) { return A.x*B.y - A.y*B.x; }
    Vector VectorUnit(Vector x){ return x / Length(x);}
    Vector Normal(Vector x) { return Point(-x.y, x.x) / Length(x);}
    double angle(Vector v) { return atan2(v.y, v.x); }
    
    bool SegmentIntersection(Point A,Point B,Point C,Point D) {
        return max(A.x,B.x) >= min(C.x,D.x) &&
               max(C.x,D.x) >= min(A.x,B.x) &&
               max(A.y,B.y) >= min(C.y,D.y) &&
               max(C.y,D.y) >= min(A.y,B.y) &&
               dcmp(Cross(C-A,B-A)*Cross(D-A,B-A)) <= 0 &&
               dcmp(Cross(A-C,D-C)*Cross(B-C,D-C)) <= 0;
    }
    Vector Rotate(Point P,Vector A,double rad){     //以P为基准点把向量A旋转rad
        return Vector(P.x+A.x*cos(rad)-A.y*sin(rad),P.y+A.x*sin(rad)+A.y*cos(rad));
    }
    
    struct node {
        char id;
        int cnt;
        Line line[23];
        vector<char> inter;
    }poly[33];
    int cmp(node ka,node kb) { return ka.id < kb.id; }
    
    int main()
    {
        char ss[4],shape[20];
        int tot = 0,i,j,e,k;
        while(scanf("%s",ss)!=EOF)
        {
            if(ss[0] == '.') break;
            if(ss[0] != '-') {
                poly[++tot].id = ss[0];
                scanf("%s",shape);
                if(shape[0] == 't') {                 //triangle
                    poly[tot].cnt = 3;
                    Point P[3];
                    for(i=0;i<3;i++) scanf(" (%lf,%lf)",&P[i].x,&P[i].y);
                    for(i=0;i<3;i++) poly[tot].line[i] = Line(P[i],P[(i+1)%3]-P[i]);
                }
                else if(shape[0] == 's') {            //square
                    poly[tot].cnt = 4;
                    Point A,B,C,D;
                    scanf(" (%lf,%lf)",&A.x,&A.y);
                    scanf(" (%lf,%lf)",&C.x,&C.y);
                    B = Rotate(A,C-A,pi*0.25); B = A + (B-A)/sqrt(2.0);
                    D = C + (A-B);
                    poly[tot].line[0] = Line(A,B-A), poly[tot].line[1] = Line(B,C-B);
                    poly[tot].line[2] = Line(C,D-C), poly[tot].line[3] = Line(D,A-D);
                }
                else if(shape[0] == 'r') {             //rectangle
                    poly[tot].cnt = 4;
                    Point A,B,C,D;
                    scanf(" (%lf,%lf)",&A.x,&A.y);
                    scanf(" (%lf,%lf)",&B.x,&B.y);
                    scanf(" (%lf,%lf)",&C.x,&C.y);
                    D = A + (C-B);
                    poly[tot].line[0] = Line(A,B-A), poly[tot].line[1] = Line(B,C-B);
                    poly[tot].line[2] = Line(C,D-C), poly[tot].line[3] = Line(D,A-D);
                }
                else if(shape[0] == 'l') {             //line
                    poly[tot].cnt = 1;
                    Point A,B;
                    scanf(" (%lf,%lf)",&A.x,&A.y);
                    scanf(" (%lf,%lf)",&B.x,&B.y);
                    poly[tot].line[0] = Line(A,B-A);
                }
                else if(shape[0] == 'p') {             //polygon
                    scanf("%d",&poly[tot].cnt);
                    Point P[22];
                    for(i=0;i<poly[tot].cnt;i++) {
                        scanf(" (%lf,%lf)",&P[i].x,&P[i].y);
                        if(i >= 1) poly[tot].line[i-1] = Line(P[i-1],P[i]-P[i-1]);
                    }
                    poly[tot].line[i-1] = Line(P[i-1],P[0]-P[i-1]);
                }
            }
            else                                    //processing...
            {
                for(i=1;i<=tot;i++)                 //处理第i个多边形
                {
                    poly[i].inter.clear();
                    for(e=0;e<poly[i].cnt;e++)      //枚举每条边
                    {
                        for(j=1;j<=tot;j++)         //枚举别的多边形
                        {
                            if(i == j) continue;
                            for(k=0;k<poly[j].cnt;k++)   //枚举别的多边形的每条边
                            {
                                Point A = poly[i].line[e].p, B = poly[i].line[e].p+poly[i].line[e].v;
                                Point C = poly[j].line[k].p, D = poly[j].line[k].p+poly[j].line[k].v;
                                if(SegmentIntersection(A,B,C,D))
                                {
                                    poly[i].inter.push_back(poly[j].id);
                                    break;
                                }
                            }
                        }
                    }
                    sort(poly[i].inter.begin(),poly[i].inter.end());
                    poly[i].inter.erase(unique(poly[i].inter.begin(),poly[i].inter.end()),poly[i].inter.end());
                }
                sort(poly+1,poly+tot+1,cmp);
                for(i=1;i<=tot;i++) {
                    printf("%c",poly[i].id);
                    int sz = poly[i].inter.size();
                    if(sz == 0)
                        puts(" has no intersections");
                    else {
                        printf(" intersects with ");
                        if(sz == 1)
                            printf("%c
    ",poly[i].inter[0]);
                        else if(sz == 2)
                            printf("%c and %c
    ",poly[i].inter[0],poly[i].inter[1]);
                        else {
                            for(j=0;j<sz-1;j++) printf("%c, ",poly[i].inter[j]);
                            printf("and %c
    ",poly[i].inter[j]);
                        }
                    }
                }
                puts("");
                tot = 0;
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    深入理解iOS开发中的锁
    整理:iOS开发算法资料
    (二)ELK Filebeat简介
    (一)ELK 部署
    zabbix + grafana 展示
    (二)LVS介绍
    (一)集群介绍
    zabbix 监控 ESXI
    zabbix proxy 安装
    zabbix fping 监控网络质量
  • 原文地址:https://www.cnblogs.com/whatbeg/p/4163115.html
Copyright © 2011-2022 走看看