hdu 1086 线段相交

来源:互联网 发布:edu域名如何注册 编辑:程序博客网 时间:2024/05/17 21:39

     计算几何

#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define N 110struct Point{double x1,y1;double x2,y2;}p[N];bool fun(Point a,Point b){//y=kx+b   =   y=x*(a.y1-a.y2)/(a.x1-a.x2)+(a.x1*a.y2-a.x2*a.y1)/(a.x1-a.x2)double x=b.y1-(b.x1*(a.y1-a.y2)+(a.x1*a.y2-a.x2*a.y1))/(a.x1-a.x2);double y=b.y2-(b.x2*(a.y1-a.y2)+(a.x1*a.y2-a.x2*a.y1))/(a.x1-a.x2);//printf("%f %f\n",x,y);if(x*y<=0)return true;return false;}int main(){int n,i,j,cnt;while(cin>>n&&n){for(i=0;i<n;i++)scanf("%lf%lf%lf%lf",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2);cnt=0;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(fun(p[i],p[j])&&fun(p[j],p[i]))cnt++;printf("%d\n",cnt);}return 0;}


 

原创粉丝点击