【问题标题】:Lines Intersections by Drawing?通过绘图线相交?
【发布时间】:2015-12-06 17:32:17
【问题描述】:

我正在画下图。使用line 命令绘制蓝线和红线。当我画一条红线时,有没有办法知道它是否与蓝线相交?我有兴趣计算以绿色显示的坐标。

【问题讨论】:

  • 由于你的蓝色line 不是单调的,也不是一个函数,基于interp1 的常用方法将不起作用。一个万无一失的方法是逐段沿着您的line,手动检查交叉点,并确定每条红线的最近交叉点。但我很确定有一个更智能、基于图像处理或基于可视化的解决方案(我在考虑光线追踪或类似的东西)。
  • 我认为这是进入计算几何领域,线段相交算法,人们必须担心所有可用线段的有效遍历。我在mathworks.com/matlabcentral/fileexchange/… 找到了一个文件交换实现,但没有尝试过,所以我不知道它是否能解决 OP 的问题。
  • @paisanco 该功能运行速度非常快。谢谢。请添加答案,以便我接受。

标签: matlab math graphics line intersection


【解决方案1】:

是的,你可以使用polyxpoly,你只需要插入你的线/蓝色多边形的坐标。

【讨论】:

  • 这可行,但据我所知确实需要映射工具箱。
【解决方案2】:

如果您有 MATLAB 映射工具箱,polyxpoly 就可以使用。

但是,如果您不这样做,最终的问题是从计算几何中找到(或编写您自己的)高效线段交互算法的实现。

对于检查几个线段,使用基于 interp1 的方法检查所有线段对就可以了,但是对于检查许多线段,这不是最有效的方法,因为它在 N 中是 O(N^2),即段对。有些方法更有效,它们依赖于对线段列表进行预排序并排除相距太远的线段。有关此类方法的一个讨论位于:

Sweep line intersection algorithm discussion by University of Illinois

对于 MATLAB 实现,可以从 MATLAB File Exchange 获得一个可能适用于该问题的选项:

http://www.mathworks.com/matlabcentral/fileexchange/27205-fast-line-segment-intersection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2020-11-25
    • 2020-05-24
    • 2015-03-16
    相关资源
    最近更新 更多