hdu1086 You can Solve a Geometry Problem too 计算几何求线段

#include <stdio.h>#include <math.h>#define MAX 110struct Segment{double x1,y1,x2,y2 ;}seg[MAX];double max(double a , double b){return a>b?a:b ;}double min(double a , double b){return a<b?a:b ;}bool quickExclude(const Segment &a , const Segment &b){double minRX = min(a.x1 , a.x2) , maxRX = max(a.x1 , a.x2) ;double minRY = min(a.y1 , a.y2) , maxRY = max(a.y1 , a.y2) ;double minTX = min(b.x1 , b.x2) , maxTX = max(b.x1 , b.x2) ;double minTY = min(b.y1 , b.y2) , maxTY = max(b.y1 , b.y2) ;if(max(minRX,minTX)>min(maxTX,maxRX) && max(minTY,minRY)>min(maxTY,maxRY)){return false ;}return true ;}double f(double x1 , double y1 ,double x2 , double y2){return x1*y2-y1*x2 ;}bool ifIntersect(Segment a, Segment b){if(quickExclude(a,b)){if(f(a.x1-b.x1,a.y1-b.y1,b.x2-b.x1,b.y2-b.y1)*f(b.x2-b.x1,b.y2-b.y1,a.x2-b.x1,a.y2-b.y1)>=0 &&f(b.x1-a.x1,b.y1-a.y1,a.x2-a.x1,a.y2-a.y1)*f(a.x2-a.x1,a.y2-a.y1,b.x2-a.x1,b.y2-a.y1)>=0){return true ;}}return false ;}int main(){int n ;while(~scanf("%d",&n) && n){for(int i = 0 ; i < n ; ++i){scanf("%lf%lf%lf%lf",&seg[i].x1,&seg[i].y1,&seg[i].x2,&seg[i].y2) ;}int ans = 0 ;for(int i = 0 ; i < n ; ++i){for(int j = i+1 ; j < n ; ++j){if(ifIntersect(seg[i],seg[j])){++ans;}}}printf("%d\n",ans) ;}return 0 ;}

,我提着行李,独自一人向远方走去,夕阳将我的身影拉得斜长,

hdu1086 You can Solve a Geometry Problem too 计算几何求线段

相关文章:

你感兴趣的文章:

标签云: