zoukankan      html  css  js  c++  java
  • 线段和矩形相交 POJ 1410

      1 // 线段和矩形相交 POJ 1410
      2 
      3 // #include <bits/stdc++.h>
      4 #include <iostream>
      5 #include <cstdio>
      6 #include <cstdlib>
      7 #include <algorithm>
      8 #include <vector>
      9 #include <math.h>
     10 using namespace std;
     11 #define LL long long
     12 typedef pair<int,int> pii;
     13 const int inf = 0x3f3f3f3f;
     14 const LL MOD =100000000LL;
     15 const int N =110;
     16 #define clc(a,b) memset(a,b,sizeof(a))
     17 const double eps = 1e-8;
     18 void fre() {freopen("in.txt","r",stdin);}
     19 void freout() {freopen("out.txt","w",stdout);}
     20 inline int read() {int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0') {if(ch=='-') f=-1; ch=getchar();}while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}return x*f;}
     21 
     22 int sgn(double x){
     23     if(fabs(x) < eps)return 0;
     24     if(x < 0)return -1;
     25     else return 1;
     26 }
     27 struct Point{
     28     double x,y;
     29     Point(){}
     30     Point(double _x,double _y){
     31         x = _x;y = _y;
     32     }
     33     Point operator -(const Point &b)const{
     34         return Point(x - b.x,y - b.y);
     35     }
     36     double operator ^(const Point &b)const{
     37         return x*b.y - y*b.x;
     38     }
     39     double operator *(const Point &b)const{
     40         return x*b.x + y*b.y;
     41     }
     42 };
     43 
     44 struct Line{
     45     Point s,e;
     46     int inx;
     47     Line(){}
     48     Line(Point _s,Point _e){
     49         s=_s;e=_e;
     50     }
     51 };
     52 
     53 // Line line[N];
     54 bool inter(Line l1,Line l2){
     55     return 
     56         max(l1.s.x,l1.e.x) >= min(l2.s.x,l2.e.x) &&
     57         max(l2.s.x,l2.e.x) >= min(l1.s.x,l1.e.x) &&
     58         max(l1.s.y,l1.e.y) >= min(l2.s.y,l2.e.y) &&
     59         max(l2.s.y,l2.e.y) >= min(l1.s.y,l1.e.y) &&
     60         sgn((l2.s-l1.s)^(l1.e-l1.s))*sgn((l2.e-l1.s)^(l1.e-l1.s)) <= 0 &&
     61         sgn((l1.s-l2.s)^(l2.e-l2.s))*sgn((l1.e-l2.s)^(l2.e-l2.s)) <= 0;
     62 }
     63 bool OnSeg(Point P,Line L){
     64     return
     65     sgn((L.s-P)^(L.e-P))==0&&
     66     sgn((P.x-L.s.x)*(P.x-L.e.x))<=0&&
     67     sgn((P.y-L.s.y)*(P.y-L.e.y))<=0;
     68 }
     69 
     70 int inConvexPoly(Point a,Point p[],int n){
     71     for(int i=0;i<n;i++){
     72         if(sgn((p[i]-a)^(p[(i+1)%n]-a))<0) return -1;
     73         else if (OnSeg(a,Line(p[i],p[(i+1)%n]))) return 0;
     74     }
     75     return 1;
     76 }
     77 
     78 Point p[4];
     79 int main(){
     80     int T;
     81     scanf("%d",&T);
     82     while(T--){
     83         double x1,y1,x2,y2;
     84         scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
     85         Line line=Line(Point(x1,y1),Point(x2,y2));
     86         scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
     87         if(x1>x2) swap(x1,x2);
     88         if(y1>y2) swap(y1,y2);
     89         p[0]=Point(x1,y1);
     90         p[1]=Point(x2,y1);
     91         p[2]=Point(x2,y2);
     92         p[3]=Point(x1,y2);
     93         if(inter(Line(p[0],p[1]),line)){
     94             printf("T
    ");
     95             continue;
     96         }
     97         if(inter(Line(p[1],p[2]),line)){
     98             printf("T
    ");
     99             continue;
    100         }
    101         if(inter(Line(p[2],p[3]),line)){
    102             printf("T
    ");
    103             continue;
    104         }
    105         if(inter(Line(p[3],p[0]),line)){
    106             printf("T
    ");
    107             continue;
    108         }
    109         if(inConvexPoly(line.s,p,4)>=0||inConvexPoly(line.e,p,4)>=0){
    110             printf("T
    ");
    111             continue;
    112         }
    113         else 
    114             printf("F
    ");
    115     }
    116     return 0;
    117 }
  • 相关阅读:
    C 工具库7:local_pool
    进程间传递文件描述符
    ucontext实现的用户级多线程框架
    ucontext实现的用户级多线程框架2(抢先式多线程)
    网络接收缓存的设计
    利用用户级线程提高多线程应用的性能
    死锁检测
    网络服务器发送封包设计
    C 工具库8:map
    ucontext实现的用户级多线程框架3(实现echo服务器)
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5857099.html
Copyright © 2011-2022 走看看