杭电acm

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main() {
 5     int num;
 6     bool intersect(double ax1, double ay1, double ax2, double ay2,
 7                double bx1, double by1, double bx2, double by2);
 8     while(true) {
 9         cin >> num;
10         if(num == 0) break;
11         double *x1 = new double[num];
12         double *y1 = new double[num];
13         double *x2 = new double[num];
14         double *y2 = new double[num];
15         int i, k;
16         for(i = 0; i<num;i++) {
17             cin >> x1[i] >> y1[i] >> x2[i] >> y2[i];
18         }
19         
20         int count = 0;
21         
22         for(i = 0; i < num -1;i++)
23             for(k = i+1; k < num ;k++) {
24                 if(intersect(x1[i], y1[i], x2[i], y2[i],
25                     x1[k], y1[k], x2[k], y2[k]))
26                     count++;
27             }
28         
29         cout << count << endl;
30         delete[] x1;
31         delete[] y1;
32         delete[] x2;
33         delete[] y2;
34     }
35     return 0;
36 }
37 bool intersect(double ax1, double ay1, double ax2, double ay2,
38                double bx1, double by1, double bx2, double by2) {
39 
40     //P1(ax1,ay1),P2(ax2,ay2)
41     //P3(bx1,by1),P4(bx2,by2)
42     //P3P1(ax1-bx1, ay1-by1), P3P2(ax2-bx1,ay2-by1) P3P4(bx2-bx1,by2-by1)
43     //P1P3(bx1-ax1,by1-ay1),P1P4(bx2-ax1, by2-ay1) P1P2(ax2-ax1, ay2-ay1)
44 
45     //P3P1 * P3P4
46     double a = (ax1-bx1)*(by2-by1)-(ay1-by1)*(bx2-bx1);
47     /* P3P2 * P3P4 */
48     double b = (ax2-bx1)*(by2-by1)-(ay2-by1)*(bx2-bx1);
49     //P1P3 * P1P2
50     double c = (bx1-ax1)*(ay2-ay1)-(by1-ay1)*(ax2-ax1);
51     //P1P4 * P1P2
52     double d = (bx2-ax1)*(ay2-ay1)-(by2-ay1)*(ax2-ax1);
53     if(a*b <=0 && c*d <= 0)
54         return true;
55     else
56         return false;
57     
58 }

 

posted @ 2014-06-11 10:30  soul390  阅读(299)  评论(0)    收藏  举报