程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj 1410 矩形與線段相交判斷

poj 1410 矩形與線段相交判斷

編輯:C++入門知識

[cpp]
#include <iostream>  
#include <cstring>  
#include<cmath>  
#include<algorithm>  
using namespace std; 
struct point 

    int x,y; 
}; 
int xj(point x1,point x2,point x3,point x4)//相交為1,不交為0   

    if(min(x1.x,x2.x)>max(x3.x,x4.x)||min(x1.y,x2.y)>max(x3.y,x4.y) 
       ||min(x3.x,x4.x)>max(x1.x,x2.x)||min(x3.y,x4.y)>max(x1.y,x2.y) 
      ) 
      return 0;//不交:矩形排斥實驗 ,最小的>最大的 肯定不交   
      int a,b,c,d; 
      a=(x1.x-x2.x)*(x3.y-x1.y)-(x1.y-x2.y)*(x3.x-x1.x);//跨立實驗   
      b=(x1.x-x2.x)*(x4.y-x1.y)-(x1.y-x2.y)*(x4.x-x1.x); 
      c=(x3.x-x4.x)*(x1.y-x3.y)-(x3.y-x4.y)*(x1.x-x3.x); 
      d=(x3.x-x4.x)*(x2.y-x3.y)-(x3.y-x4.y)*(x2.x-x3.x); 
      return a*b<=0&&c*d<=0; 

int main(void) 

   int t; 
   point x1,x2,j1,j2,j3,j4; 
   cin>>t; 
   while(t--) 
   { 
      cin>>x1.x>>x1.y>>x2.x>>x2.y>>j1.x>>j1.y>>j3.x>>j3.y; 
      j2.x=j1.x; j2.y=j3.y; 
      j4.x=j3.x; j4.y=j1.y; 
      if(  min(x1.x,x2.x)>min(j1.x,j3.x)&&max(x1.x,x2.x)<max(j1.x,j3.x)&& 
           min(x1.y,x2.y)>min(j1.y,j3.y)&&max(x1.y,x2.y)<max(j1.y,j3.y)  )  
      {cout<<"T"<<endl;continue;}//判斷是否在內部   
      if(xj(x1,x2,j1,j2)||xj(x1,x2,j2,j3)||xj(x1,x2,j3,j4)||xj(x1,x2,j4,j1)) 
      cout<<"T"<<endl; //只要有一條邊相交,就是相交   
      else cout<<"F"<<endl;       
   } 
作者:liang5630

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved