两条线段相交判断学习理解

两条线段相交判断可以分为两步:

1,快速排斥实验

2,跨立实验

详细解释:

第一步检查以线段A为对角线的矩形和以线段B对角线的矩形是否相交,如果不相交则两条线段必然不相交,可以快速排除,如果相交就继续检查是否有交点;

所以第一步也叫做快速排斥实验,首先先进行第一步的研究:

     

如果知道,如果cd边的最大点的x值小于ab边的最小点的x值 ,或者cd边最大点的y值小于ab边的最小点的y值可以说明分别以两线段为对角线的矩形不相交;

代码表示如下:

max(C.x,D.x)<min(A.x,B.x)或者max(C.y,D.y)<min(A.y,B.y)

同样也需要检查上面的边的代号反过来的:

max(A.x,B.x)<min(C.x,D.x)或者max(A.y,B.y)<min(C.y,C.y)

如果上面的四条判断有一个为真,则代表两线段必不可交,否则应该进行第二步判断;

当通过第一步后会有下面四种可能:

跨立实验:

如果两线段相交那么就意味着它们互相跨立,即如上图点A和B分别在线段CD两侧,点C和D分别在线AB两侧。

即向量(A-C)和(B-C)分别在向量(D-C)两边,则向量(A-C)和(D-C)的叉乘积与(B-C)和(D-C)的叉乘积符号相反,根据右手定则,它们的叉乘积方向一个向下一个向上,是方向相反的

平行线。则它们的点乘小于零。如果向量(A-C)和(B-C)在向量(D-C)同一侧,则它们叉乘积同向,因为根据右手定则都向一个方向指向,所以它们是符号相同的平行线,即点乘大于零;

公式是:

((A-C)x(D-C))*((B-C)x(D-C))<0;

同样需要证明向量(D-B)和向量(C-B)在向量(A-B)的两侧,((D-B)x(A-B))*((C-B)x(A-B))<0;这两个同时成立才行;

但是对于中间那个图,则不满足上面的两个公式了,它也是成立的;此时公式中该如何表达呢?

即当((A-C)x(D-C))*((B-C)x(D-C))=0 或者((D-B)x(A-B))*((C-B)x(A-B))=0时,下面给出行证明当这两个公式等于零时为中间那个图的情形

如果等于零,那么代表公式(A-C)x(D-C)或者(B-C)x(D-C)等于0,(它两个不可能垂直在);

即(A-C)和(D-C)可能共线或者(B-C)和(D-C)可能共线,(或者另外两对里面出现共线的),这样他们就一定会是相交的。

两条线段相交判断学习理解相关推荐

  1. Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交。第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4)

    Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交.第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4) 题目 破题 ...

  2. 如何判断两条线段相交(python实现)

    向量叉乘(行列式计算):向量a(x1,y1),向量b(x2,y2): 首先我们要明白一个定理:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向:若结果大于0,表示向量b在向 ...

  3. JAVA计算两条直线的交点(判断两条线段相交)

    //计算两条直线的交点 //输入四个点,前两个点确定线段1,后两个点确定线段2 //输出交点坐标 public class Main{public static void main(String ar ...

  4. 判断两条线段相交(跨立实验)

    题目描述 [题意] 有n条线段(编号为1~n),按1~n的顺序放在二维坐标系上(就是先放1号,再放2号--), 要求输出最上面的那些线段的编号(就是没有其他线段压在它上面的那些线段) [输入格式] 第 ...

  5. 【数学计算】判断两条线段是否相交+计算两条线段的交点和夹角

    序言 还是那句话,学习是为了应用.书到用时方恨"用得少" 1. 计算两条直线的交点 直线一般式方程 A x + B y + C = 0 Ax+By+C = 0 Ax+By+C=0 ...

  6. 计算几何-判断两条线段是否相交

    原理:如果两条线段相交,那么必须跨立,就是以一条线段为标准,另一条线段的两端点一定在这条线段的两段 也就是说a b两点在线段cd的两端,c d两点在线段ab的两端 struct point() {do ...

  7. 判断两条线段/直线相交,并求交点

      一.矢量基本知识     因为后面的计算需要一些矢量的基本知识,这里只是简单的列举如下,如果需要更加详细的信息,可以自行搜索wikipedia或google. 1.矢量的概念:如果一条线段的端点是 ...

  8. Unity3D C#数学系列之判断两条线段是否相交并求交点

    1 引言 问题:已知三维空间中四点A.B.C.D,如何判断线段AB与CD是否相交,若相交则求出交点. 分析: AB.CD要相交,则AB.CD必须要在同一平面内 快速排斥和跨立实验判断是否相交 几何法分 ...

  9. 平面内两条线段的位置关系(相交)判定与交点求解

    http://www.cnblogs.com/devymex/archive/2010/08/19/1803885.html 概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.C ...

最新文章

  1. 项目构建之maven篇:2.HelloWorld项目构建过程
  2. 蓝桥杯单片机DS18B20代码注释及部分时序图
  3. ReentrantLock1.8源码
  4. [Reinforcement Learning] Model-Free Prediction
  5. torch随机数 manual_seed
  6. cmd下执行java
  7. Python实现直角坐标系求两点间距离
  8. Mat  iplimage
  9. TVS 瞬态抑制二极管如何选型?
  10. 游戏编程精粹1---数学技巧---可预测随机数---2
  11. express实现上传图片到七牛云
  12. Servlet异常处理器
  13. QFileInfo截取文件后缀
  14. AICON分论坛 | 昇思MindSpore探索人工智能发展新路径
  15. 中国未来只有三种人:资源者、配置者、投资人
  16. 鸡年的年度编程语言,非它莫属
  17. PXE+KickStart自动化安装Linux系统
  18. 美丽乡村可行性研究报告
  19. php高德地图手机定位,AMap3DMap_Demo
  20. 手游行业2011年十大事件盘点

热门文章

  1. 面试官:解释下什么是死锁?为什么会发生死锁?怎么避免死锁?
  2. html做一个qq气泡,HTML5实现QQ聊天气泡效果
  3. 人工智能与医疗如何结合
  4. SVN合作开发的注意事项
  5. 转 The C10K problem 中文版 - 如何处理高并发连接
  6. python小项目: 海龟库模拟弹幕古诗词
  7. 信息系统工程监理资质
  8. RTX 3090 Ti KINGPIN 怎么样 RTX 3090 Ti KINGPIN 显卡什么级别
  9. 解读MIUI 6背后四大布局,三层风险
  10. 京东数据分析——电商平台比价api接口