zoukankan      html  css  js  c++  java
  • 线段相交几何模板

    struct point{
        double x,y;
        point(double _x=0,double _y=0){ x=_x,y=_y; }
        point operator+ (const point& a) const{ return point(x+a.x,y+a.y); }
        point operator- (const point& a) const{ return point(x-a.x,y-a.y); }
        point operator* (double a) const{ return point(x*a,y*a); }
    }; //
    struct line{
        point s,e;
        line(point a,point b){ s=a,e=b; }
        line(){}
    }; // 线
    double getdis(point a, point b){
        double xx=a.x-b.x,yy=a.y-b.y;
        return sqrt(xx*xx+yy*yy);
    } // 两点距离
    double multi(point a,point b,point c){
        double xa,ya,xb,yb;
        xa=b.x-a.x; ya=b.y-a.y;
        xb=c.x-b.x; yb=c.y-b.y;
        return xa*xb+ya*yb;
    } // 点乘
    double cross(point a,point b,point c){
        double xa,ya,xb,yb;
        xa=b.x-a.x; ya=b.y-a.y;
        xb=c.x-a.x; yb=c.y-a.y;
        return xa*yb-xb*ya;
    } // 叉乘
    int judgec(line a,line b){
        if (max(a.s.x,a.e.x)>=min(b.s.x,b.e.x) &&
            max(a.s.y,a.e.y)>=min(b.s.y,b.e.y) &&
            max(b.s.x,b.e.x)>=min(a.s.x,a.e.x) &&
            max(b.s.y,b.e.y)>=min(a.s.y,a.e.y) &&
            cross(a.s,b.s,b.e)*cross(a.e,b.s,b.e)<=0 
            && cross(b.s,a.s,a.e)*cross(b.e,a.s,a.e)<=0
            ) return 1;
        else return 0;
    } // 判断线段是否相交
    point getpoi(point a,point b,point c,point d){
        double u=cross(a,b,c),v=cross(b,a,d);
        return point((c.x*v+d.x*u)/(u+v),(c.y*v+d.y*u)/(u+v));
    } // 求交点
  • 相关阅读:
    windows下安装mysql教程
    python生成器实现杨辉三角
    python默认参数问题
    python中判断素数的函数
    extract()和extact_first()的区别
    硬连接和软连接的区别
    du与df的区别
    命题逻辑
    关于 better-scroll 设置了以后无法滚动或不生效的问题
    Maven *IDEA*
  • 原文地址:https://www.cnblogs.com/lhclqslove/p/15539045.html
Copyright © 2011-2022 走看看