zoukankan      html  css  js  c++  java
  • POJ 1410 Intersection(线段与矩形相交)

    判断矩形和线段是否相交,没什么说的,

    正确理解题意中相交的定义

    具体代码:

    #include<iostream>
    #include<stdio.h>
    #include<cmath>
    using namespace std;
    typedef struct
    {
        double x;
        double y;
    }point;
    point rect[4];
    point line[2];
    
    double multi(point p0, point p1, point p2)
    {   return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);}
    
    bool is_cross(point s1,point e1,point s2,point e2)//判断线段是否相交(非规范相交)
    {
        return max(s1.x,e1.x) >= min(s2.x,e2.x)&&max(s2.x,e2.x) >= min(s1.x,e1.x)&&
        max(s1.y,e1.y) >= min(s2.y,e2.y)&&max(s2.y,e2.y) >= min(s1.y,e1.y)&&
        multi(s1,e1,s2)*multi(s1,e1,e2) <= 0&&multi(s2,e2,s1)*multi(s2,e2,e1) <= 0;
    }
    int main()
    {
        int i,j;
        int t;
        bool flag;
        double bigx,smallx,bigy,smally;
        scanf("%d",&t);
        while(t--)
        {
            flag=true;
            scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&line[0].x,&line[0].y,&line[1].x,&line[1].y,&rect[3].x,&rect[3].y,&rect[1].x,&rect[1].y);
            rect[0].x=rect[3].x;
            rect[0].y=rect[1].y;
            rect[2].x=rect[1].x;
            rect[2].y=rect[3].y;
            bigx=max(rect[3].x,rect[1].x),smallx=min(rect[3].x,rect[1].x),bigy=max(rect[3].y,rect[1].y),smally=min(rect[3].y,rect[1].y);
            if(is_cross(line[0],line[1],rect[0],rect[1])&&is_cross(line[0],line[1],rect[1],rect[2])&&is_cross(line[0],line[1],rect[2],rect[3])&&is_cross(line[0],line[1],rect[3],rect[0]))
            {
                flag=false;
                printf("T
    ");
                continue;
            }
    
            if((line[0].x>smallx&&line[0].x<bigx&&line[0].y>smally&&line[0].y<bigy)||(line[1].x>smallx&&line[1].x<bigx&&line[1].y>smally&&line[1].y<bigy))
            {
                flag=false;
                printf("T
    ");
                continue;
            }
            printf("F
    ");
        }
        return 0;
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    221. 最大正方形
    9. 回文数
    2. 两数相加
    1. 两数之和
    HDU 1864 最大报销额
    47 java包打成本地maven
    46 数组中的元素进行位置交换
    5 docker安装kibana
    45 vue图片放大预览
    4 docker中安装es
  • 原文地址:https://www.cnblogs.com/wanglaoda/p/4937166.html
Copyright © 2011-2022 走看看