如何检测两条线段相交的位置? [关闭]

2024-04-22

如何确定两条线是否相交,如果相交,则在什么 x,y 点相交?


There’s a nice approach to this problem that uses vector cross products. Define the 2-dimensional vector cross product v × w to be vx wy − vy wx.

假设两条线段从p to p + r和来自q to q + s。那么第一条线上的任意点都可以表示为p + t r(对于标量参数t) 和第二行上的任意点为q + u s(对于标量参数u).

如果我们能找到两条线相交t and u这样:

p + t r = q + u s

两边交叉用s,得到

(p + t r) × s = (q + u s) × s

自从s × s= 0,这意味着

t (r × s) = (qp) × s

因此,求解t:

t = (qp) × s / (r × s)

同理,我们可以解出u:

(p + t r) × r = (q + u s) × r

u (s × r) = (pq) × r

u = (pq) × r / (s × r)

为了减少计算步骤的数量,可以方便地将其重写如下(记住s × r = − r × s):

u = (qp) × r / (r × s)

现在有四种情况:

  1. If r × s= 0 和 (q − p) × r= 0,则两条线共线。

    在这种情况下,表示第二段的端点 (q and q + s)根据第一条线段的方程(p + t r):

    t0 = (qp) · r / (r · r)

    t1 = (q + sp) · r / (r · r) = t0 + s · r / (r · r)

    If the interval between t0 and t1 intersects the interval [0, 1] then the line segments are collinear and overlapping; otherwise they are collinear and disjoint.

    Note that if s and r point in opposite directions, then s · r < 0 and so the interval to be checked is [t1, t0] rather than [t0, t1].

  2. If r × s= 0 和 (q − p) × r≠ 0,则两条线平行且不相交。

  3. If r × s≠ 0 且 0 ≤t≤ 1 和 0 ≤u≤ 1,两条线段相交于点p + t r = q + u s.

  4. 否则,两条线段不平行但不相交。

图片来源:该方法是 3D 线相交算法的 2 维特化,摘自 Ronald Goldman 发表的文章“三空间中两条线的相交”,发表于图形宝石,第 304 页。在三维空间中,通常的情况是线是倾斜的(既不平行也不相交),在这种情况下,该方法给出两条线最接近的点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测两条线段相交的位置? [关闭] 的相关文章

  • 使用CSS的圆形文本段落[重复]

    这个问题在这里已经有答案了 我一直在寻找一个关于如何将一段文本放置在圆圈内的体面且快速的解决方案 我发现有两种解决方案 解决方案1 浮动倍数div与文本左侧和右侧的文本高度相同 并通过更改 divwidth您可以调整文本的剩余空间 解决方案
  • 检测图中的所有圆圈

    我有一个存储在 Map 数据结构中的有向图 其中键是节点的 ID value 是key节点所指向的节点的nodeId数组 Map
  • 获取几何长度

    有谁知道获取 WPF 几何图形长度 以像素为单位 的有效方法 我知道 WPF 中的几何图形是基于矢量的 因此实际上没有像素长度 但必须能够根据可见的绘制图像获得长度 我的意思是 如果我在 1024x800 像素图像中绘制一些几何图形 则必须
  • 求 3d 中 2 个任意立方体的交集

    所以 我想找出一个函数 可以让您确定两个任意旋转和大小的立方体是否相交 如果立方体的旋转不是任意的 而是锁定到特定的轴 则相交很简单 您可以通过检查它们的边界来检查它们是否在所有三个维度上相交 以查看它们在所有三个维度上是否相交或在彼此之内
  • 给定 3D 空间中的一条线,如何找到从它到一点的角度?

    我在 3D 空间中有两组点 我想画一条穿过两组点的中心的线 然后找到从该线到每个点的角度 从那里开始 我将根据两个角度的接近程度来确定两组中的匹配点 我知道如何找到每组点的中心 只需将它们平均在一起 并且我知道如何将它们匹配 甚至考虑到它们
  • 如何在 OpenCV 中更好地计算射线线段交点?并得到它的交点和距原点的距离?

    我有 4 条线段 A B C 和 D 每条线都表示为两个点 例如 线A由点A1和点A2表示 我想要的是 点 X 即线 A 射线与线 B 相交的点 X与A1 原点 之间的距离 测试相交时 线 A 射线不应 与线段 D 相交 与线段C相交 我该
  • 边界椭圆约束于水平/垂直轴

    背景 我正在尝试将地形图裁剪成围绕多个风力涡轮机的最小尺寸椭圆 以最小化地图的尺寸 执行此地图裁剪的程序可以裁剪椭圆 但仅限轴沿 x 轴和 y 轴对齐的椭圆 我知道边界椭圆问题的算法 https stackoverflow com ques
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

    我正在学习有关使用 OpenGL 在 Java 中创建游戏引擎的教程 我正在尝试在屏幕上渲染一个三角形 一切运行良好 我可以更改背景颜色 但三角形不会显示 我还尝试运行作为教程系列的一部分提供的代码 但它仍然不起作用 教程链接 http b
  • 以有效的方式找到最近点

    我在 2d 平面上有一个点 例如 x0 y0 和一组 n 点 x1 y1 xn yn 我想在 a 中找到距离 x0 y0 最近的点比尝试所有要点要好得多 有什么解决办法吗 我还应该说我的观点是这样排序的 bool less point a
  • 如何将多个矩形打包为 2d 盒子俄罗斯方块样式

    我有许多不同宽度和高度的矩形 我有一个更大的矩形平台来放置它们 我想将它们包装在平台的一侧 以便它们在纵向 X 尺寸上展开 但将横向 Y 尺寸保持在最小限度 就是把它们像俄罗斯方块游戏一样放置 不能有重叠 但可以有间隙 有没有算法可以做到这
  • 投影 3D 网格的 2D 轮廓算法

    给定 一个 3D 网格 由一组顶点和三角形定义 并用这些点构建网格 问题 找到任意平面上投影的任意旋转网格的二维轮廓 投影很容易 挑战在于找到平面中投影三角形边的 外壳 我需要一些有关研究该算法的输入 指针的帮助 为简单起见 我们可以假设
  • 使用 boost 几何检查两条线是否有交点

    是否可以使用 boost geometry 检查两条线段 每条线段由二维中的两个点给出 是否彼此相交 如果可能的话 boost geometry 是否还允许检查特殊情况 例如另一条线上只有一个点 数字上 或者两条线相等 如果你具体谈论Boo
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • 按度数在圆上找到一个点?

    假设我们有一个 100x100 坐标系 如下所示 0 0 是它的左上角 50 50 是它的中心点 100 100 是它的右下角 等等 现在我们需要从中心向外画一条线 我们知道线的角度 但需要计算其终点的坐标 您认为最好的方法是什么 例如 如
  • 找出圆周上像素坐标的算法

    如果我知道圆心 圆半径和垂直角的像素坐标 如何找出圆圆周上一定角度的像素值 基本上 我试图在不同的时间绘制时钟的指针 1点 2点等 Let h是浮点数形式的小时 h 2 25将是 02 15 等 在 0 到 12 之间 cX cY 是中心的
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 谷歌地图颤动检查点是否在多边形内

    我正在使用 google maps flutter 插件开发 flutter 项目 我想检查用户位置是否位于我在地图上创建的多边形内 有一个简单的方法使用 JavaScript api con tainsLocation 方法 但对于 fl
  • 多边形内的 SQL 地理点在 STIntersect 上不返回 true(但使用 Geometry 返回 true)

    我不想仅仅为了在 STIntersect 中返回 true 而将地理数据转换为几何图形 下面是 SQL 中的代码 DECLARE point GEOGRAPHY GEOGRAPHY Point 1 1 4326 DECLARE polygo
  • 在矩阵/位图中查找质量簇

    这是此处发布的问题的延续 在 2D 位图上查找质心 https stackoverflow com questions 408358 finding the center of mass on a 2d bitmap正如给出的例子 它讨论了
  • 如何从矩形点计算旋转角度?

    我有4分1 2 3 4闭合一个矩形 这些点按以下方式排列在数组中 x1 y1 x2 y2 x3 y3 x4 y4 我遇到的问题是矩形可以旋转一定角度 如何计算原始点 灰色轮廓 和角度 我试图在 javascript css3 transfo

随机推荐

  • 将非规范化数字刷新为零

    我在网上搜索过 但没有结果 Xcode 和 Visual C 有没有办法将非规范化数字视为 0 我本以为 IDE 首选项中有一个选项可以打开此选项 但似乎找不到它 我正在做一些跨平台音频工作 需要停止某些处理器占用资源 Cheers 您正在
  • 如何解决这个 sass 插值问题

    警告 您可能不想在此处进行插值时使用颜色值白色 它最终可能会呈现为白色 这可能会产生无效的 CSS 将颜色名称用作字符串或映射键时 请始终引用颜色名称 例如 白色 如果您确实想在此处使用颜色值 请使用 colorName 93 text c
  • 为什么要在 base::split(.$cyl) 中加点?

    在 R 中用于数据科学第21 5 1章 https r4ds had co nz iteration html shortcuts 这个语法用在基函数中split cyl 为什么里面的点 cyl 套餐purrr有一个占位符的语法 or x
  • 使用多个 txt 文件的内容创建数据框

    我是 R 编程新手 在尝试从多个文本文件创建一个数据框时遇到困难 我有一个包含 100 多个文本文件的目录 每个文件都有不同的文件名 但内容具有相似的格式 例如3 列 姓名 年龄 性别 我想将每个文本文件加载到 R 中并将它们合并到 1 个
  • Plotly Scattermapbox,无法向标记添加文本

    我正在尝试将文本添加到下面的绘图中 原始代码修改自https plotly com python lines on mapbox https plotly com python lines on mapbox import plotly g
  • Entity Framework Core 2.0 中每种类型的表

    这些是我的模型 public class Company public int CompanyId get set public string Name get set public string Address get set publi
  • TS2345:类型“number |”的参数未定义' 不可分配给'number' 类型的参数

    我正在尝试在打字稿中创建一个 chrome 扩展 我有以下代码 我尝试从后台脚本向 contentscript 发送消息 background script chrome tabs query active true currentWind
  • 纯 CSS 的 Tab 系统,anchor 避免了向标签的传播

    我正在制作一个仅使用 CSS 的选项卡系统 target and checked伪类 但我在标签内有一个锚点 并且标签不会触发 checked 如果您单击锚点 checked不会触发 因为点击位于 a 标签 但位于 a
  • 如何从sql server触发器操作TEXT、NTEXT数据

    我很难理解 TEXT NTEXT 数据不能从 sql server 触发器进行操作 是真的吗 如果没有 请解释我如何操作 SQL Server 触发器中的 TEXT NTEXT 数据 谢谢 不要使用 text 或 ntext 使用 nvar
  • ANR com.android.vending.billing.IInAppBillingService

    自从修改我的代码以使用 Android 计费库而不是示例应用程序中的旧 IABHelper 以来 我一直通过下面的跟踪收到大量 ANR 有人知道如何解决这个问题吗 跟踪上没有我的一行代码 main prio 5 tid 1 Native g
  • JSON 对象和 Javascript 对象

    我正在创建一个网络应用程序的前端 我收到 JSON 格式的所有响应 解析它并将其作为 html 格式 我查看了一些 javascript MVC 框架 即backbone js ember js 等 发现它们对于我的简单应用程序来说太过分了
  • 有没有带有 API 的 Latex Web 服务? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个 Web 服务 API 接受这种类型的 Latex http 请求 http some web
  • 如何使用 qt 在键盘上仅显示数字

    我在我的项目中使用 Qt Quick Virtual Keyboard 当我单击一个对象时 我想显示键盘但只显示数字 我怎样才能做到这一点 这就是我想做的 您可以使用Qt ImhFormattedNumbersOnly http doc q
  • Malloc 的字符串包含垃圾值

    我刚刚将 Objective C 库转换为 C 库 希望能够跨平台 然而 在我将这件事发送出去进行处理之前 一切似乎都正常 就在我收到错误的时候 回顾一些修改 我注意到调试器中的一些东西 就在 malloc 的字符串之后 如下所示 char
  • 尝试将盒装 dyn 特征传递到函数时出现“借用的值寿命不够长”错误

    我是 Rust 新手 我对借用检查器的行为感到非常困惑 trait Foo fn foo self struct Bar lt a gt pub f a Vec
  • 从选定的单选按钮中选择下一个单选按钮

    我有一个单选按钮组 我想选择所选按钮旁边的一个 document ready function next click function input name choice checked next click button display
  • 使用 Filemerge 如何查看下部窗格。有结果的那个?

    您知道 您进行了全新安装 底部的窗格就消失了 我喜欢那个窗格 看到那个小点 单击它 您可以将窗口拉入视图 现在生活好多了
  • UI-路由器和解析,控制器中的未知提供者

    我在 UI Router state 调用中使用解析 在我的控制器中 我可以毫无问题地访问这些值 但它会抛出错误 如下所示 injector unpr p0 ctrlOptionsProvider 20 3C trlOptions 以下代码
  • pyplot/matplotlib 条形图,填充颜色取决于值

    我想生产在Python中使用 matplotlib pyplot 根据值进行填充的条形图 图例颜色条 同时将模块依赖性保持在最低限度 有没有比以下更简单的事情 import matplotlib pyplot as plt def colo
  • 如何检测两条线段相交的位置? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案