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

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(使用前将#替换为@)

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

  • 球体上的 3D 坐标为纬度和经度

    我得到以下信息 存在一个原点为 0 0 0 半径为 R 的球体 进行射线球体相交后 我知道 3D 空间中球体上的一个点 XYZ 直线穿过球体外壳的 3D 空间中的确切位置 对于我的程序 我想计算球体上 XYZ 点的纬度和经度 但我无法想出
  • 计算圆中的每个笛卡尔点

    我有一个数组 int lawn new int 980 1280 它存储草坪中叶片的高度值 在我的模拟中 我有一个机器人在草坪上行走并切割刀片 我的机器人呈圆形 直径为 rDiameter 坐标系是用 Double 完成的 我的草坪是用 I
  • SVG 圆起点

    如何更改 svg 圆的起始点 使其从 0 点钟开始逐渐动画化 默认圆形 svg 从 3 点钟开始 我当前的圈子 悬停动画 timeline position fixed width 500px height 500px top 50 lef
  • 给定一个 4x4 齐次矩阵,我如何获得 3D 世界坐标?

    所以我有一个正在旋转然后再次平移和旋转的对象 我将这些翻译的矩阵存储为对象成员 现在 当我进行对象拾取时 我需要知道该对象的 3D 世界坐标 目前我已经能够像这样获得物体的位置 coords 0 finalMatrix 12 坐标 1 最终
  • 使用CSS的圆形文本段落[重复]

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

    我有一堆段 我拥有的数据是构成段 x1 y1 和 x2 y2 的 2 个点 并且想根据它们的位置对它们进行分类 如果一个片段与另一个片段足够接近 那么我想将它们放在一起 如果我必须用一句话来描述它 我想找到距线段任何点 5px 距离的所有相
  • Python中的三角波形状数组

    生成 100 个数字组成的数组 形成下面三角波的形状 最大 最小幅度为 0 5 的最有效方法是什么 记住三角波形 生成三角波的最简单方法是使用 signal sawtooth 请注意 signal sawtooth phi width 接受
  • Three.js 中的文本几何

    我在 Three js r74 中的 TextGeometry 遇到一些问题 我该如何正确实施 这是我的代码笔 codepen io cheesyeyes pen eJqZxK 提前致谢 好吧 对于每个正在寻找简单答案而不是链接和其他超载示
  • 如何在 Three.js 中从三角面获取多边形?

    我在网上查了一下是否有人遇到同样的问题 我正在使用 Three js 我有一个 3DObject 其中可能包含孔 面是三角形的 假设我想从上面看到它 我的目标是获得一个代表顶面周长的多边形 这对我来说意味着不再有三角面 而只有 1 个多边形
  • WPF 3D 旋转球体 GUI

    我一直在尝试在 WPF 中为我的课堂作业制作 3D 用户界面 但遇到了一个问题 现在 2 3 天都无法解决 我尝试用谷歌搜索答案 我查看了一些 stackoverflow 帖子 但还没有一个可以帮助我解决问题 情况是这样的 我有一个 3D
  • 自定义圆形视图。放置视图

    昨天我尝试创建一个自定义视图 其中所有元素 像按钮 图像按钮 被放置在一个圆圈周围 间距相等 我的目标是得到这个 我尝试了这段代码 public class CircleView extends RelativeLayout private
  • 用渐变色绘制一个 D3 圆

    如何用渐变颜色画一个圆 比如说 从黄色到蓝色的渐变 通常 要创建黄色圆圈 我们可以使用以下代码 var cdata 50 40 var xscale 40 var xspace 50 var yscale 70 var svg d3 sel
  • 如何在 OpenCV 中更好地计算射线线段交点?并得到它的交点和距原点的距离?

    我有 4 条线段 A B C 和 D 每条线都表示为两个点 例如 线A由点A1和点A2表示 我想要的是 点 X 即线 A 射线与线 B 相交的点 X与A1 原点 之间的距离 测试相交时 线 A 射线不应 与线段 D 相交 与线段C相交 我该
  • 不均匀圆盘的最佳覆盖

    What kind of algorithm can I use to search for an optimal minimum area covering of a limited region of the XY plane with
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

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

    我在 2d 平面上有一个点 例如 x0 y0 和一组 n 点 x1 y1 xn yn 我想在 a 中找到距离 x0 y0 最近的点比尝试所有要点要好得多 有什么解决办法吗 我还应该说我的观点是这样排序的 bool less point a
  • 如何检查一个盒子是否适合另一个盒子(允许任何旋转)

    假设我有两个盒子 每个盒子都是一个长方体 http en wikipedia org wiki Rectangular cuboid aka长方体 我需要编写一个函数来决定盒子是否具有尺寸 一 二 三 可以装入具有尺寸的盒子中 甲 乙 丙
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • 通过非 sf 列内连接两个 sf 对象

    我尝试使用内连接或左连接连接两个 sf 数据帧 这些数据框内部都有几何列 我不断收到错误 check join x y 中的错误 y 应该是一个数据框 对于空间连接 请使用 st joinFALSE 下面的可重现示例 df1 lt data
  • 黑色左/右三角形大小不同

    我使用黑色左指三角形 右左指三角形几何形状作为网站上的链接 并使用它们的 HTML 代码 和 9664 9654 由于某种原因 即使我在没有其他元素的空白页面上使用三角形 它们也不会以相同的大小显示 在 Chrome 上 向左指向的位置比向

随机推荐

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

    我在网上搜索过 但没有结果 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因为这个问题是题外话 但却具有历史意义 目前不接受新的答案