计算几何 --- 判断两条线段是否相交(平面内)
#include<stdio.h>
#include<string.h>
typedef struct In{
double x1,x2,y1,y2;
};
In num[110];
int n;
int Judge(In x,In y){
double a,b,c,d;
a=(x.x1-x.x2)*(x.y1-y.y1)-(x.x1-y.x1)*(x.y1-x.y2);
b=(x.x1-x.x2)*(x.y1-y.y2)-(x.x1-y.x2)*(x.y1-x.y2);
c=(y.x1-y.x2)*(y.y1-x.y1)-(y.x1-x.x1)*(y.y1-y.y2);
d=(y.x1-y.x2)*(y.y1-x.y2)-(y.x1-x.x2)*(y.y1-y.y2);
if(a*b<=0&&c*d<=0){
return 1;
}
return 0;
}
int main(){
int i,j,s;
while(scanf("%d",&n),n){
memset(num,0,sizeof(num));
for(i=0;i<n;i++){
scanf("%lf%lf%lf%lf",&num[i].x1,&num[i].y1,&num[i].x2,&num[i].y2);
}
for(s=i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(Judge(num[i],num[j])) s++;
}
}
printf("%d\n",s);
}
return 0;
}