zoukankan      html  css  js  c++  java
  • HDU 1086 You can Solve a Geometry Problem too

    http://acm.hdu.edu.cn/showproblem.php?pid=1086

    判断两线段是否相交,用向量搞了

    View Code
    #include <iostream>
    using namespace std ;
    struct point{
        double x,y ;
    } ;
    typedef struct L{
        point p1,p2 ;
    }L ;
    L kk[110] ;
    double direction(point p1,point p2,point p)
    {
        return (p.x-p1.x)*(p1.y-p2.y)-(p1.x-p2.x)*(p.y-p1.y) ;
    }
    bool online(point p1,point p2,point p)
    {
        return (p.x<=max(p1.x,p2.x) && p.x>=min(p1.x,p2.x) && p.y<=max(p1.y,p2.y) && p.y>=min(p1.y,p2.y)) ;
    }
    bool intersect(point p1,point p2,point p3,point p4)
    {
        double d1=direction(p3,p4,p1) ;
        double d2=direction(p3,p4,p2) ;
        double d3=direction(p1,p2,p3) ;
        double d4=direction(p1,p2,p4) ;
        if(d1*d2<0 && d3*d4<0)
            return true ;
        if(d1==0 && online(p3,p4,p1)) 
            return true ;
        if(d2==0 && online(p3,p4,p2))
            return true ;
        if(d3==0 && online(p1,p2,p3))
            return true ;
        if(d4==0 && online(p1,p2,p4))
            return true ;
        return false ;
    }
    int main()
    {
        int n ;
        while(scanf("%d",&n),n)
        {
            int ans=0 ;
            for(int i=0;i<n;i++)
                scanf("%lf%lf%lf%lf",&kk[i].p1.x,&kk[i].p1.y,&kk[i].p2.x,&kk[i].p2.y) ;
            for(int i=0;i<n;i++)
                for(int j=i+1;j<n;j++)
                    if(intersect(kk[i].p1,kk[i].p2,kk[j].p1,kk[j].p2))
                        ans++ ;
            printf("%d\n",ans) ;
        }
        return 0 ;
    } 
  • 相关阅读:
    ie下如果已经有缓存,load方法的效果就无法执行.的解决方法
    css公共样式
    pageX、pageY全兼容
    js滚动加载插件
    getComputedStyle()与currentStyle
    excel15个技巧
    XMLHttpRequest函数
    继承模式
    cookie函数
    jQuery添加删除元素
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2542788.html
Copyright © 2011-2022 走看看