标签:
/*判断AB和CD两线段是否有交点: 同时满足两个条件:(‘x‘表示叉积) 1.C点D点分别在AB的两侧.(向量(ABxAC)*(ABxAD)<=0) 2.A点和B点分别在CD两侧.(向量(CDxCA)*(CDxCB)<=0)*/ /*数据稍微多点我就写错了,不求快但求稳*/ #include<stdio.h> #include<string.h> int fun(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) { double d1=(x2-x1)*(y4-y1)-(y2-y1)*(x4-x1),d2=(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1); if(d2*d1<=0) { double d3=(x4-x3)*(y1-y3)-(y4-y3)*(x1-x3),d4=(x4-x3)*(y2-y3)-(x2-x3)*(y4-y3); if(d3*d4<=0) return 1; return 0; } else return 0; } int main() { double a[101][4]; int n,i,j; while(~scanf("%d",&n)&&n) { memset(a,0,sizeof(a)); int count=0; for(i=1;i<=n;i++) scanf("%lf%lf%lf%lf",&a[i][0],&a[i][1],&a[i][2],&a[i][3]); for(j=1;j<=n;j++) for(i=j+1;i<=n;i++) count+=fun(a[j][0],a[j][1],a[j][2],a[j][3],a[i][0],a[i][1],a[i][2],a[i][3]); printf("%d\n",count); } }
you can Solve a Geometry Problem too(hdoj1086)
标签:
原文地址:http://www.cnblogs.com/a1225234/p/4520531.html