段与多边形的交点

时间:2015-02-22 11:12:04

标签: matlab computational-geometry

我必须在MATLAB中创建一个执行以下任务的函数:

输入:

表单

中的

p 多边形

  

p = [x1,y1; X2,Y2; X3,Y3; X4,Y4 ...]

s 结构,其中包含从A到B的段

  

s = struct(' A',[x,y],' B' [u,w])

返回:

1)一个整数,表示段和多边形之间有多少交叉点(例如,0,1,2)

2)从A到B的新段,其中A是输入段的第一个交点或初始点,B是交点的第二个点或段输入的最后一个点。

我知道如何使用 inpolygon 功能来完成它。我一直在阅读如何使用这个函数,并知道要使用它,我应该提供一个查询点和多边形顶点的坐标。它将返回1或0,具体取决于它是否在内部。

我的问题是,如何获得精确放置在边界中的线段的查询点(在线段与其相交的情况下)?

1 个答案:

答案 0 :(得分:1)

如果安装了Mapping Toolbox,则可以使用polyxpoly。由于这是一个相当基本的问题,因此文件交换中有相当多的免费MATLAB代码。以下是我在搜索字词'polygon intersect'中找到的内容:

    Bruno Luong

  • 2D Polygon edges intersection

      

    找到两个2D多边形边缘的交点,这是一个用于跟进新闻组讨论的简单函数

  • Curve Intersect 2 SebastianHölz

      

    此文件基于Duane Hanselman的曲线相交功能。它扩展了函数的范围,以处理任意线条/多边形,这些线条/多边形也可能具有垂直线段或具有不增加x值的线段。

  • Curve intersections NS

      

    虽然FEX中已经存在一些其他函数来计算   曲线的交点,编写了这段短代码   速度是最高优先级。整个过程中没有使用循环,   充分利用MATLAB的矢量化功能

  • Douglas Schwarz

  • Fast and Robust Curve Intersections

      

    此函数计算两条曲线相交的(x,y)位置。曲线可以用NaN打破或具有垂直段。它也非常快(至少代表我认为是典型应用程序的数据)。

  • David Legland

  • geom2d

      

    [...]导出新形状:2条线之间的交点,线与圆之间的线,平行线和垂直线