ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线段相交几何模板

2021-11-11 11:32:02  阅读:137  来源: 互联网

标签:return point xb double 线段 xa 相交 ya 模板


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));
} // 求交点

 

标签:return,point,xb,double,线段,xa,相交,ya,模板
来源: https://www.cnblogs.com/lhclqslove/p/15539045.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有