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 }