zoukankan      html  css  js  c++  java
  • POJ 1269 Intersecting Lines 直线交

    不知道谁转的计算几何题集里面有这个题...标题还写的是基本线段求交...

    结果题都没看就直接敲了个线段交...各种姿势WA一遍以后发现题意根本不是线段交而是直线交...白改了那个模板...

    乱发文的同学真是该死...浪费我几个小时的生命...

    /********************* Template ************************/
    #include <set>
    #include <map>
    #include <list>
    #include <cmath>
    #include <ctime>
    #include <deque>
    #include <queue>
    #include <stack>
    #include <bitset>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <cassert>
    #include <cstdlib>
    #include <cstring>
    #include <sstream>
    #include <fstream>
    #include <numeric>
    #include <iomanip>
    #include <iostream>
    #include <algorithm>
    #include <functional>
    using namespace std;
    
    #define EPS         1e-8
    #define MAXN        (int)5e5+5
    #define MOD         (int)1e9+7
    #define PI          acos(-1.0)
    #define LINF        ((1LL)<<50)
    #define INF         (1<<30)
    #define DINF        (1e10)
    #define max(a,b)    ((a) > (b) ? (a) : (b))
    #define min(a,b)    ((a) < (b) ? (a) : (b))
    #define max3(a,b,c) (max(max(a,b),c))
    #define min3(a,b,c) (min(min(a,b),c))
    #define BUG         cout<<"BUG! "<<endl
    #define LLL         cout<<"--------------"<<endl
    #define L(t)        (t << 1)
    #define R(t)        (t << 1 | 1)
    #define Mid(a,b)    ((a + b) >> 1)
    #define lowbit(a)   (a & -a)
    #define FIN         freopen("in.txt","r",stdin)
    #define FOUT        freopen("out.txt","w",stdout)
    #pragma comment     (linker,"/STACK:102400000,102400000")
    
    // typedef long long LL;
    // typedef unsigned long long ULL;
    // typedef __int64 LL;
    // typedef unisigned __int64 ULL;
    // int gcd(int a,int b){ return b?gcd(b,a%b):a; }
    // int lcm(int a,int b){ return a*b/gcd(a,b); }
    
    /*********************   F   ************************/
    struct POINT{
        double x,y;
        POINT(double _x = 0, double _y = 0):x(_x),y(_y){};
    };
    bool operator == (POINT a,POINT b){
        if(a.x == b.x && a.y == b.y) return true;
        return false;
    }
    struct LINE{
        POINT a,b;
        double K,B;
        LINE(POINT _a = 0,POINT _b = 0):a(_a),b(_b){
            if((a.x - b.x) == 0){
                K = DINF;
                B = a.x;
            }else{
                K = ((a.y - b.y) / (a.x - b.x));
                B = (- (b.x * a.y - a.x * b.y) / (a.x - b.x));
            }
        }
    
    };
    double dist(POINT p1,POINT p2){
        return(sqrt((p1.x-p2.x) * (p1.x-p2.x) + (p1.y-p2.y) * (p1.y-p2.y)));
    }
    double multiply(POINT sp,POINT ep,POINT op){
        return (sp.x-op.x) * (ep.y-op.y) - (ep.x-op.x) * (sp.y-op.y);
    }
    bool cross_Judge(LINE a ,LINE b) {
        double x = multiply(a.a,a.b,b.a);
        double y = multiply(a.a,a.b,b.b);
        if(x == 0 && y != 0) return true;
        if(x != 0 && y == 0) return true;
        return (x * y < 0);
    }
    bool same(LINE a , LINE b) {
        if(a.a == b.a && a.b == b.b) return true;
        if(a.b == b.a && a.a == b.b) return true;
        return false;
    }
    bool onseg(POINT a,POINT s,POINT e){
        if(multiply(a,s,e) == 0 && a.x <= max(s.x,e.x) && a.x >= min(s.x,e.x)
           && a.y <= max(s.y,e.y) && a.y >= min(s.y,e.y))
            return true;
        return false;
    }
    bool cover(LINE a , LINE b) {
        if(multiply(a.a,a.b,b.a) == 0 && multiply(a.a,a.b,b.b) == 0){
            if(onseg(a.a,b.a,b.b) || onseg(a.b,b.a,b.b)) return true;
            if(onseg(b.a,a.a,a.b) || onseg(b.b,a.a,a.b)) return true;
        }else return false;
    }
    bool cross(LINE a , LINE b){
        if(min(a.a.x,a.b.x) > max(b.a.x,b.b.x)) return false;
        if(min(b.a.x,b.b.x) > max(a.a.x,a.b.x)) return false;
        if(min(a.a.y,a.b.y) > max(b.a.y,b.b.y)) return false;
        if(min(b.a.y,b.b.y) > max(a.a.y,a.b.y)) return false;
        return (cross_Judge(a,b) && cross_Judge(b,a));
    }
    int main()
    {
        //FIN;
        int n ;
        cin>>n;
        cout<<"INTERSECTING LINES OUTPUT"<<endl;
        for(int i = 0 ; i < n ; i++){
            double a,b,c,d,e,f,g,h;
            cin>>a>>b>>c>>d>>e>>f>>g>>h;
            LINE x = LINE(POINT(a,b),POINT(c,d));
            LINE y = LINE(POINT(e,f),POINT(g,h));
            if(multiply(x.a,x.b,y.a) == 0 && multiply(x.a,x.b,y.b) == 0){
                cout<<"LINE"<<endl;
                continue;
            }else if(x.K == y.K && x.B != y.B){
                cout<<"NONE"<<endl;
                continue;
            }else{
                cout<<"POINT ";
                if(x.K == DINF){
                    printf("%.2lf %.2lf
    ",x.B,x.B * y.K + y.B);
                }else if(y.K == DINF) {
                    printf("%.2lf %.2lf
    ",y.B,y.B * x.K + x.B);
                }else {
                    double cx = (x.B-y.B) / (y.K-x.K);
                    double cy = x.K * cx + x.B;
                    printf("%.2lf %.2lf
    ",cx,cy);
                }
                continue;
            }
        }
        cout<<"END OF OUTPUT"<<endl;
        return 0;
    }
  • 相关阅读:
    zoj3299 Fall the Brick
    hdu4533 威威猫系列故事——晒被子
    FZU 1650 1752 a^b mod c
    Codeforces Round #136 (Div. 1) B. Little Elephant and Array
    Codeforces Round #292 (Div. 1) C. Drazil and Park
    Uva 12436 Rip Van Winkle's Code
    Codeforces Beta Round #19 D. Points
    hdu1513 Palindrome
    poj1160 Post Office
    zjnu1181 石子合并【基础算法・动态规划】——高级
  • 原文地址:https://www.cnblogs.com/Felix-F/p/3251373.html
Copyright © 2011-2022 走看看