两条线段相交判断学习理解
两条线段相交判断学习理解
两条线段相交判断可以分为两步:
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)可能共线,(或者另外两对里面出现共线的),这样他们就一定会是相交的。
两条线段相交判断学习理解相关推荐
- Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交。第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4)
Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交.第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4) 题目 破题 ...
- 如何判断两条线段相交(python实现)
向量叉乘(行列式计算):向量a(x1,y1),向量b(x2,y2): 首先我们要明白一个定理:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向:若结果大于0,表示向量b在向 ...
- JAVA计算两条直线的交点(判断两条线段相交)
//计算两条直线的交点 //输入四个点,前两个点确定线段1,后两个点确定线段2 //输出交点坐标 public class Main{public static void main(String ar ...
- 判断两条线段相交(跨立实验)
题目描述 [题意] 有n条线段(编号为1~n),按1~n的顺序放在二维坐标系上(就是先放1号,再放2号--), 要求输出最上面的那些线段的编号(就是没有其他线段压在它上面的那些线段) [输入格式] 第 ...
- 【数学计算】判断两条线段是否相交+计算两条线段的交点和夹角
序言 还是那句话,学习是为了应用.书到用时方恨"用得少" 1. 计算两条直线的交点 直线一般式方程 A x + B y + C = 0 Ax+By+C = 0 Ax+By+C=0 ...
- 计算几何-判断两条线段是否相交
原理:如果两条线段相交,那么必须跨立,就是以一条线段为标准,另一条线段的两端点一定在这条线段的两段 也就是说a b两点在线段cd的两端,c d两点在线段ab的两端 struct point() {do ...
- 判断两条线段/直线相交,并求交点
一.矢量基本知识 因为后面的计算需要一些矢量的基本知识,这里只是简单的列举如下,如果需要更加详细的信息,可以自行搜索wikipedia或google. 1.矢量的概念:如果一条线段的端点是 ...
- Unity3D C#数学系列之判断两条线段是否相交并求交点
1 引言 问题:已知三维空间中四点A.B.C.D,如何判断线段AB与CD是否相交,若相交则求出交点. 分析: AB.CD要相交,则AB.CD必须要在同一平面内 快速排斥和跨立实验判断是否相交 几何法分 ...
- 平面内两条线段的位置关系(相交)判定与交点求解
http://www.cnblogs.com/devymex/archive/2010/08/19/1803885.html 概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.C ...
最新文章
- 项目构建之maven篇:2.HelloWorld项目构建过程
- 蓝桥杯单片机DS18B20代码注释及部分时序图
- ReentrantLock1.8源码
- [Reinforcement Learning] Model-Free Prediction
- torch随机数 manual_seed
- cmd下执行java
- Python实现直角坐标系求两点间距离
- Mat iplimage
- TVS 瞬态抑制二极管如何选型?
- 游戏编程精粹1---数学技巧---可预测随机数---2
- express实现上传图片到七牛云
- Servlet异常处理器
- QFileInfo截取文件后缀
- AICON分论坛 | 昇思MindSpore探索人工智能发展新路径
- 中国未来只有三种人:资源者、配置者、投资人
- 鸡年的年度编程语言,非它莫属
- PXE+KickStart自动化安装Linux系统
- 美丽乡村可行性研究报告
- php高德地图手机定位,AMap3DMap_Demo
- 手游行业2011年十大事件盘点