S(abc) = (|ab|*|ac|*sinΘ) / 2 = |ab| × |ac| / 2//叉积
#include <stdio.h>
struct point {
double x1, y1, x2, y2;
}buf[101];
int judge(int i, int j) {
//叉积
int f1=0,f2=0;
double acd=(buf[i].x1-buf[j].x1)*(buf[i].y1-buf[i].y2)-(buf[i].x1-buf[i].x2)*(buf[i].y1-buf[j].y1);
double bcd=(buf[i].x1-buf[j].x2)*(buf[i].y1-buf[i].y2)-(buf[i].x1-buf[i].x2)*(buf[i].y1-buf[j].y2);
if(acd*bcd<=0)
f1=1;
double cab=(buf[j].x1-buf[i].x1)*(buf[j].y1-buf[j].y2)-(buf[j].x1-buf[j].x2)*(buf[j].y1-buf[i].y1);
double dab=(buf[j].x1-buf[i].x2)*(buf[j].y1-buf[j].y2)-(buf[j].x1-buf[j].x2)*(buf[j].y1-buf[i].y2);
if(cab*dab<=0)
f2=1;
if((f1+f2)==2)
return 1;
return 0;
}
int main() {
int n, i, j, ans;
while(~scanf("%d", &n) && n) {
ans = 0;
for(i=0; i<n; i++)
scanf("%lf%lf%lf%lf", &buf[i].x1, &buf[i].y1,
&buf[i].x2, &buf[i].y2);
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(judge(i, j))
ans ++;
printf("%d\n", ans);
}
return 0;
}