博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
直线与直线相交 直线与线段相交 线段与线段相交
阅读量:7223 次
发布时间:2019-06-29

本文共 1641 字,大约阅读时间需要 5 分钟。

 

int sgn(double x){    if(fabs(x) < eps) return 0;    return x < 0 ? -1:1;}struct Point{    double x,y;    Point() {}    Point(double _x,double _y)    {        x = _x,y = _y;    }    Point operator -(const Point &b)const    {        return Point(x - b.x,y - b.y);    }    //叉积    double operator ^(const Point &b)const    {        return x*b.y - y*b.x;    }    //点积    double operator *(const Point &b)const    {        return x*b.x + y*b.y;    }};struct Line{    Point p,q;    Line() {};    Line(Point _p,Point _q)    {        p = _p,q = _q;    }    //两直线相交求交点    //第一个值为0表示直线重合,为1表示平行,为2表示相交    //只有第一个值为2时,交点才有意义    pair
operator &(const Line &b)const { Point res = p; if(sgn((p-q)^(b.p-b.q)) == 0) { if(sgn((p-b.q)^(b.p-b.q)) == 0) return make_pair(0,res);//重合 else return make_pair(1,res);//平行 } double t = ((p-b.p)^(b.p-b.q))/((p-q)^(b.p-b.q)); res.x += (q.x-p.x)*t; res.y += (q.y-p.y)*t; return make_pair(2,res); }};//判断直线和线段相交bool Seg_inter_line(Line l1,Line l2) //判断直线l1和线段l2是否相交,<0是把交于线段端点处看做不相交{ return sgn((l2.p-l1.q)^(l1.p-l1.q))*sgn((l2.q-l1.q)^(l1.p-l1.q)) < 0;}//*判断线段相交bool inter(Line l1,Line l2){ return max(l1.p.x,l1.q.x) >= min(l2.p.x,l2.q.x) && max(l2.p.x,l2.q.x) >= min(l1.p.x,l1.q.x) && max(l1.p.y,l1.q.y) >= min(l2.p.y,l2.q.y) && max(l2.p.y,l2.q.y) >= min(l1.p.y,l1.q.y) && sgn((l2.p-l1.q)^(l1.p-l1.q))*sgn((l2.q-l1.q)^(l1.p-l1.q)) <= 0 && sgn((l1.p-l2.q)^(l2.p-l2.q))*sgn((l1.q-l2.q)^(l2.p-l2.q)) <= 0;}

 

转载于:https://www.cnblogs.com/pach/p/7257606.html

你可能感兴趣的文章
痞子衡嵌入式:语音处理工具Jays-PySPEECH诞生记(5)- 语音识别实现(SpeechRecognition, PocketSphinx0.1.15)...
查看>>
HDU——1285 确定比赛名次
查看>>
atof
查看>>
通用js模块02:validutils.js
查看>>
git 的安装与初始化
查看>>
iPhone打包步骤
查看>>
java中函数形参的理解
查看>>
数据结构与算法----->算法----->高级排序算法:快速排序
查看>>
ubuntu中安装VMWare tools
查看>>
Python第三方模块--requests简单使用
查看>>
太鼓达人
查看>>
IT兄弟连 JavaWeb教程 EL表达式中的运算
查看>>
前端神器Sublime Text 3 的安装与使用
查看>>
使用jQuery.FileUpload插件和服Backload组件自定义上传文件夹
查看>>
Xcode7配置网络
查看>>
Maven
查看>>
Renaming and Removing files
查看>>
如何获取网页验证码图片并保存到本地(Java实现) [问题点数:40分,结帖人lanxuezaipiao]...
查看>>
基于MIMICS和Matlab的虚拟内窥镜的构想
查看>>
CentOS 6.5 mysql切换存储目录
查看>>