首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何检测两个线段相交的位置?

要检测两个线段相交的位置,可以使用以下方法:

  1. 线段的交点检测:

给定两条线段的起点和终点,可以使用以下公式计算它们的交点:

代码语言:txt
复制
P = (x1, y1)
Q = (x2, y2)
R = (x3, y3)
S = (x4, y4)

P = (x1, y1)
Q = (x2, y2)
R = (x3, y3)
S = (x4, y4)

// 计算交点
x = ((x1*y2 - y1*x2)*(x3 - x4) - (x1 - x2)*(x3*y4 - y3*x4)) / ((x1 - x2)*(y3 - y4) - (y1 - y2)*(x3 - x4))
y = ((x1*y2 - y1*x2)*(y3 - y4) - (y1 - y2)*(x3*y4 - y3*x4)) / ((x1 - x2)*(y3 - y4) - (y1 - y2)*(x3 - x4))
  1. 判断交点是否在线段上:

计算交点的t值,如果t值在0到1之间,则交点在第一条线段上;如果t值在0到1之间,则交点在第二条线段上。

代码语言:txt
复制
t1 = ((x - x1) * (x2 - x1) + (y - y1) * (y2 - y1)) / ((x2 - x1)^2 + (y2 - y1)^2)
t2 = ((x - x3) * (x4 - x3) + (y - y3) * (y4 - y3)) / ((x4 - x3)^2 + (y4 - y3)^2)
  1. 判断两条线段是否相交:

如果交点同时在两条线段上,则两条线段相交。

代码语言:txt
复制
if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {
    // 两条线段相交
} else {
    // 两条线段不相交
}

通过以上方法,可以检测两个线段是否相交,以及它们的交点位置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 两个单链表相交的问题

    两个单链表相交的一系列问题 【 题目】 在本题中, 单链表可能有环, 也可能无环。 给定两个单链表的头节点 head1和head2, 这两个链表可能相交, 也可能 不相交。...请实现一个函数, 如果两个链表相交, 请返回相交的第一个节点; 如果不相交, 返回null 即可。...要求: 如果链表1的长度为N, 链表2的长度为M, 时间复杂度请达到 O(N+M), 额外空间复杂度请达到O(1) image.png public static class Node { public...= null) { return bothLoop(head1, loop1, head2, loop2); } return null; } //寻找第一个入环的节点 如果有则返回...= n2) { n1 = n1.next; n2 = n2.next; } return n1; } //没有环的情况下,起初让指针移动到距离相交节点等距的位置

    57220

    【算法】两个单链表相交,返回相交的第一个节点

    给定两个 单链表的头节点head1和head2,这两个链表可能相交,也可能不相交。 请实现一个函数,如果两个链表相交,请返回相交的第一个节点; 如果不相交,返回null即可。...,无环的情况 2.1、1个链表有环,1个链表无环 结论:永远不可能相交 2.2、两个链表都无环 若相交,那么必然如图所示: ?...若遍历到结尾都不相等,则两个链表没有相交的节点。...两个有环链表相遇情况1 如图所示,第一个相交结点必然不是环结点,而是入环前的节点。那么我们可以抹去成环部分,就可以转为两个无环链表的相交的问题了。 情况2 ?...null; } /// 处理两个链表无环的情况 /// 先把两个链表中,较长的链表走到跟较短的链表一样长 /// 最后两个链表一起走,第一相遇的节点,就是第一个相交节点 public

    99510

    CGAL 计算两个凸多边形相交的面积

    我正在使用 CGAL 计算两个凸多边形相交的面积。在对 this 的接受答案中发布了执行此操作的简短演示代码。问题。...但是,当我修改该代码以使用我感兴趣的多边形时,CGAL 从 CGAL::intersection() 例程的深处抛出运行时异常。...这是一个简短的示例代码,它是从上面链接的 SO 问题中复制粘贴的,除了它使用我自己的多边形并打印一些关于每个多边形的诊断信息以表明它们是凸面的并使用 CCW 绕组订单。...最佳答案 我可以重现此错误(在带有 clang++ 的 MacOS 上使用 CGAL 4.9)。据我了解,这种类型的未捕获异常不应该发生,换句话说,您发现了 CGAL 中的错误。...显然,是否满足这个前提条件是调用者的问题,另一个 CGAL 例程。换句话说,您的输入没有任何问题。问题出在 CGAL 实现上,或者更准确地说,是它处理所用数字表示不精确的方式。

    41240

    Visionpro从小白到大佬,第一章了解工具名称和用途

    借助 VisionPro,用户可以访问功能较强的图案匹配、斑点、卡尺、线位置、图像过滤、OCR 和 OCV 视觉工具库,以及一维条码和二维码读取,以执行各种功能,如检测、识别和测量。...CogIntersectCircleCircleTool 功能:检测两圆是否相交 CogIntersectLineCircleTool 功能:检测线与圆是否相交 CogIntersectLineEllipseTool...功能:检测线与椭圆是否相交 CogIntersectLineLineTool 功能:检测线与线是否相交 CogIntersectSegmentCircleTool 功能:检测线段与是否相交...CogIntersectSegmentEllipseTool 功能:检测线段与椭圆是否相交 CogIntersectSegmentLineTool 功能:检测线段与线是否相交 CogIntersectSegmentSegmentTool...功能:检测线段与线段是否相交 8、 Geometry - Measurement ?

    11.4K55

    如何使用CGAL轻松检索两条相交多边形的相交线

    如何使用CGAL轻松检索两条相交多边形的相交线(从第一个交点到最后一个交点)。看到图像的澄清,绿线是我想要的。...使用CGAL获取多边形相交线 Two intersecting polygons with intersection line 目前我使用下面的算法,在那里我得到的交集多边形,然后发现这是两个多边形的边界点...有人可以告诉我这是否是正确的方法,或者指出如何更好地做到这一点。 来源 2017-08-02 D.J. Klomp A 回答 2 将两个多边形的线段插入到2D排列中。然后找到具有度4的顶点。...= arr.end_vertices(); ++it) { if (4 == it->degree()) ... } 可以避开“段”名单的建设,而是直接将多边形细分成使用迭代器适配器的安排...(这是纯粹的通用编程,与CGAL无关。)

    39440

    基于相交线的立体平面SLAM

    相交线提取平面特征 本节主要介绍平面特征的计算方法。我们首先从两幅立体图像中提取线段。通过匹配直线段及其端点,计算直线端点和方向向量的三维位置。然后我们检查它们的位置,找出相交的线。...B 线段检测和计算 立体相机的帧由左图像和右图像组成。使用线段检测器(LSD)从两幅立体图像中提取线段,并用LBD描述子进行匹配。在一帧立体图像中,直线匹配具有足够的精确性和鲁棒性。...如图2(a)所示,以不同的颜色绘制线段,并且在Il和Ir中匹配的线段是相同的颜色。对于左图像Il中的每一个匹配线段,假设它们在立体帧中的行位置不变,在右图像Ir中找到其端点的对应点。...线方向n_l也由其两个端点(pe−ps)定义 ? C 线段计算 在计算平面特征之前,需要检查直线之间的关系。在三维空间几何中,相交线或平行线位于同一平面上。...从前两个条件中,实际上找到了那些紧密的线段用线方向向量的叉乘来计算平面法向量。 ? 利用平面法向量n_pi和四个端点p_k(k=1,2,3,4),计算四个不同的平面系数d_k: ?

    1.1K31

    通用汽车最新提出:3-D车道线检测新方法

    摘要:本文提出了一种基于相机的新型DNN方法,用于带不确定性估计的3D车道线检测。该方法基于半局部BEV(鸟瞰视角)的网格表示形式,其将车道线分解为简单车道线段。...输出所有网格的参数化3-D曲线表示,然后处理形成整个3-D车道曲线以及检测的不确定性估计。 ? 假设通过每个网格的车道线段很简单,用低维参数模型表示。...最终BEV特征图是生成局部车道线段的车道线预测头输入、将这些线段聚类到整个车道的全局嵌入、以及依赖于局部网格和整个车道曲线的车道点位置不确定性。 ? 网络的输入是单目图像。...与以前方法【1】相似,投影可确保BEV特征图中的每个像素对应于预定义的道路位置,与摄像机的内参数和外部姿态无关。 假设通过每个网格的车道线可以拟合为一个线段。...将网格相交的车道线投影到道路平面后,用GT车道线点把网格相交的车道线段近似为直线,可计算出偏移量和角度,即GT回归的目标。 ? 以下是预测模型训练的损失函数: ? 其中 ? ? ?

    1.3K30

    几何算法:判断两条线段是否相交

    如何判断两条线段(注意不是直线)是否有交点? 传统几何算法的局限 上过一点学的西瓜哥我,只用高中学过的知识,还是可以解这个问题的。...一条线段两个点,可以列出一个两点式(x - x1) / (x2 - x1) = (y - y1) / (y2 - y1)),两条线段是两个两点式,这样就是 二元一次方程组 了 ,就能求出两条直线的交点。...然后判断这个点是否在其中一条线段上。如果在,说明两线段相交,否则不相交。 看起来不错,但这里要考虑直线垂直或水平于坐标轴的特殊情况,还有两条直线平行导致没有唯一解的情况,除数不能为 0 的情况。...我们可以换另一个角度去解,即判断线段 1 的两个端点是否在线段 2 的两边,然后再反过来比线段 2 的两点是否线段 1 的两边。 这里我们可以利用上面 叉乘的正负代表旋转方向的特性。...以上图为例, AB 向量到 AD 向量位置需要逆时针旋转,AB 向量到 AC 向量则需要顺时针,代表 C 和 D 在 AB 的两侧,对应就是两个叉乘相乘为负数。

    93030

    Ray-AABB交叉检测算法

    、位置等相关信息来计算是否发生碰撞。...Slab英文翻译是“平板”,本文是指两个平行平面/直线之间的空间。在2D空间中slab可以理解为平行于坐标轴的两条直线间的区域,3D空间中为平行于xy平面(或者yz面,xz面)的两个平面之间的区域。...----   性质一和性质二比较容易理解,如果射线和3个slab的相交线段没有重合,那么这些线段就不可能同时存在于3个slab中,也就不可能在AABB盒子中。   ...在上述性质基础上,确定射线与AABB是否交叉需要三步骤: 如何确定候选面:只要将平面方程带入射线Ray的方程,求出这两个平面的t值,然后t值较小的那个自然先与射线交叉,那么就表示它是一个候选面。...由于AABB的slab平面都分别和两个坐标轴平行,它的面的法线总是有两个分量是0,而另外一个分量总是为1,所以我们一致使用某个轴分量为1的法线。

    5.1K70

    图形编辑器开发:基于相交策略选中图形

    因为上面实现,只做了大的 AABB 包围盒的相交检测,没有做小的 OBB 包围盒的相交检测。 对于发生旋转的图形,selection 如果和包裹图形的空白区域相交了,图形也被选中。...OBB 相交检测 我们来实现更精准的 OBB 的相交检测。 为此西瓜哥我调研(其实是瞎想)了几个方案,并研究了算法实现。...方案 1:线段相交判断 直接一点,判断 selection 的边和图形的边是否有相交的。...当发现投影产生的两条线段没有相交,那找到了那条那条分割两图形的直线,证明两个凸多边形不相交。 否则继续,如果都没找到,说明相交。 下图是以一个图形的蓝边的法向量作为分离轴,进行投影的示意图。...---- 相关阅读, 几何算法:判断两条线段是否相交 图形编辑器开发:颜色 hex 标准化 图形编辑器开发:一些会用到的简单几何算法 几何算法:矩形碰撞和包含检测算法 在容器内显示图片的五种方案

    18330

    SOLD2:自监督有遮挡的检测和描述线段

    摘要 与检测和描述特征点特征相比,检测和匹配线段是更具有挑战的任务,然而,对于多视图任务,线特征是对点特征的补充,线段特征即使在纹理较差的区域也经常出现,在此介绍第一个在单个深度网络中联合检测和描述线段的方法...,采用了自监督训练方法,该方法不需要任何带标注的线段,可以推广到任何数据集,该检测器提供了图像中线段的可重复和精确定位,利用描述子学习的最新进展,本文提出的线描述子具有高度的可区分性,同时对视点变化和遮挡保持鲁棒性...主要贡献 在 sold2中,作者联合学习了线段的检测与描述,受LCNN 和Super-Point的启发,文章引入了一个可以在没有任何标签的图像数据集上进行训练的自监督网络,在合成数据集上进行预训练后,将...总结来说,其所作出的贡献有以下三点: (1)提出了首个用于联合线段检测和描述子的深度网络; (2)自监督的线段检测方法,使其能在任一真实图像数据集上进行训练; (3)线匹配对遮挡具有一定的鲁棒性,在图像匹配任务上实现了...与其他方法进行对比的线段检测效果: 总结 sold2作为首个用于图像中线段联合检测与描述的深度学习方法,采用自监督训练方案,可以推广应用于绝大多数图像数据集,同时,受益于深层特征描述子的识别能力, 能够处理在被遮挡和定位不佳的线端点等线段描述中的常见问题

    1.1K30

    粗略的物体碰撞预测及检测

    碰撞检测问题也是游戏开发中经常遇到的问题,一个游戏场景中可能存在很多物体,它们之间大多属于较远位置或者相对无关的状态,那么一个物体的碰撞运算没必要遍历这些物体,我们可以使用一个包围一个或多个物体的多边形来讨论碰撞问题...尽管非常精确的碰撞检测算法可以精确地表示和解决碰撞问题,但是在路径规划初期对碰撞只需要有一个初步的估计,比如是否会发生碰撞,碰撞的大概程度如何,以免把大量的精力浪费在碰撞检测问题上,从而降低了在其他方面的注意力...AABB检测方法采用一个描述用的立方体或者球形体包裹住3D物体对象的整体(或者主要部分),我们可以根据包装盒的距离、位置等信息来计算是否发生碰撞。...可以利用矩阵变化加快新的AABB的计算速度,具体可以参考适合新手的3d碰撞检测 AABB静态检测   AABB的静态检测比较简单,检测两个静止包装盒是否相交,它是一种布尔测试,测试结果只有相交或者不相交...在一维坐标轴中,两线段A和B相交的条件是: 线段A在坐标轴上的最大值Amax不小于线段B在坐标轴上的最小值Bmin; 线段B坐标轴上的最大值Bmax

    1.9K60

    粗略的物体碰撞预测及检测

    碰撞检测问题也是游戏开发中经常遇到的问题,一个游戏场景中可能存在很多物体,它们之间大多属于较远位置或者相对无关的状态,那么一个物体的碰撞运算没必要遍历这些物体,我们可以使用一个包围一个或多个物体的多边形来讨论碰撞问题...尽管非常精确的碰撞检测算法可以精确地表示和解决碰撞问题,但是在路径规划初期对碰撞只需要有一个初步的估计,比如是否会发生碰撞,碰撞的大概程度如何,以免把大量的精力浪费在碰撞检测问题上,从而降低了在其他方面的注意力...AABB检测方法采用一个描述用的立方体或者球形体包裹住3D物体对象的整体(或者主要部分),我们可以根据包装盒的距离、位置等信息来计算是否发生碰撞。...可以利用矩阵变化加快新的AABB的计算速度,具体可以参考适合新手的3d碰撞检测 AABB静态检测   AABB的静态检测比较简单,检测两个静止包装盒是否相交,它是一种布尔测试,测试结果只有相交或者不相交...在一维坐标轴中,两线段A和B相交的条件是: 线段A在坐标轴上的最大值Amax不小于线段B在坐标轴上的最小值Bmin; 线段B坐标轴上的最大值Bmax不小于线段A在坐标轴上的最小值Amin; 即 (Amax-Bmin

    2.8K81

    位置和方向的世界,计算几何的基本问题

    缘起 本文从最基本的线段相交问题出发,从解析几何进入计算几何,介绍点积和叉积这个最基本的计算几何工具,引入计算几何这个关于位置和方向的大航海世界~ 分析 本文要讲清楚的两个基本问题是: 如何判断线段相交...进一步地,如果存在唯一交点,试求出相交的交点坐标 判断线段相交 考虑以下基本问题: 判断平面上两条线段是否相交 输入:4个点,分别表示第一条线段的两个端点和第二条线段的两个端点....输出:Yes/No 线段相交,分为两种 规范相交,即两条线段交点恰有一个,而且该交点不是线段的任何一个端点. 例如 ? 非规范相交,也就是不是"规范相交"的相交....类似的,C、D跨立在直线 AB 两侧的充要条件是 上面两个不等式被形象的称为跨立实验(cross test) 跨立实验能帮助我们知道两条线段是否规范相交,那么非规范相交怎么处理呢?...如果相交的话,则按照 的顺序去验证光线是否和垂直线段 相交. 假设 是第一个使得光线和 不相交的 , 则这说明光线不是和 通往 的上管道部分相交,就是和下管道部分相交.

    90410

    霍夫变换

    若参数空间中对应各个间断点的曲线或者曲面能够相交,就能找到参数空间的极大值以及对应的参数;若参数空间中对应各个间断点的曲线或者曲面不能相交,则说明间断点不符合某已知曲线。...它首先选取该形状中的任意点(a,b)为参考点,然后从该任意形状图形的边缘每一点上,计算其切线方向Φ和到参考点(a,b)位置的偏移适量r,以及r与x轴的夹角α。...返回值: ·peaks是一个Q×2的矩阵,每行的两个元素分别是某一峰值点在hough矩阵中的行、列索引,Q为找到的峰值点的数目。...默认值为20.θ和ρ θ和ρ)的两条线段之间的距离小于 FillGap,则合并为一个直线段。默认值为20....MinLength 检测的直线段的最小长度阈值:如果检测出的直线段长度大于MinLength,则保留;丢弃小于MinLength的直线段。默认值为40.

    1.8K30
    领券