判断两线段是否相交
来源:互联网 发布:mac eclipse swing 编辑:程序博客网 时间:2024/05/22 03:48
预备知识:叉积 点击打开链接
好,我们知道叉积的正负代表逆/顺时针
那么怎么利用这个性质。
观察可知,若相交那么如图所示的旋转方法一定为相同的。
但这样还不够
所以要另一条线段再做一次
if(multi(l2.p1,l1.p2,l1.p1)*multi(l1.p2,l2.p2,l1.p1)>0&&multi(l1.p1,l2.p2,l2.p1)*multi(l2.p2,l1.p2,l2.p1)>0) return true;还有一种特殊情况,即端点相交
所以还要判三点共线,且点在线段之间。
bool check(line l1,line l2){ if(multi(l2.p1,l1.p2,l1.p1)*multi(l1.p2,l2.p2,l1.p1)>0&&multi(l1.p1,l2.p2,l2.p1)*multi(l2.p2,l1.p2,l2.p1)>0) return true; if(multi(l1.p1,l2.p1,l2.p2)==0&&min(l2.p1.x,l2.p2.x)<=l1.p1.x&&l1.p1.x<=max(l2.p1.x,l2.p2.x)) return true; if(multi(l1.p2,l2.p1,l2.p2)==0&&min(l2.p1.x,l2.p2.x)<=l1.p2.x&&l1.p2.x<=max(l2.p1.x,l2.p2.x)) return true; if(multi(l2.p1,l1.p1,l1.p2)==0&&min(l1.p1.x,l1.p2.x)<=l2.p1.x&&l2.p1.x<=max(l1.p1.x,l1.p2.x)) return true; if(multi(l2.p2,l1.p1,l1.p2)==0&&min(l1.p1.x,l1.p2.x)<=l2.p2.x&&l2.p2.x<=max(l1.p1.x,l1.p2.x)) return true; return false;}
阅读全文
2 0
- 判断两线段是否相交
- 判断两线段是否相交
- 判断两线段是否相交
- 判断两线段是否相交
- 判断两线段是否相交
- 判断两线段是否相交
- 判断两线段是否相交
- 判断两线段是否相交
- 判断两线段是否相交
- zju1648 判断两条线段是否相交
- 判断两条线段是否相交
- 判断两条线段是否相交
- 判断两条线段是否相交
- 判断两条线段是否相交
- 判断平面上两线段是否相交
- 判断两条线段是否相交
- c#判断两线段是否相交
- 判断两条线段是否相交 模板
- 国家标准网
- HDU 2017 多校联赛4 1009 Questionnaire
- OpenCV学习之卷积滤波
- 写一个函数 输入一个十六进制数,输出相应的十进制数。
- 自然语言预处理(一)分词(char & word)
- 判断两线段是否相交
- NYOJ D的小L 酒馆浪人的博客
- 以python为起点,进入程序员的世界。(每晚上9点总结当天所学)2017/8/4 8:34
- 给出年月日 计算该日是该年的第几天
- 设计模式之禅笔记--面向对象设计六大原则之二
- python解答欧拉计划第59题
- Android AdapterView View的复用机制 分析
- 基于HBase的大数据存储的应用场景分析
- Android UI性能优化实战 识别绘制中的性能问题