我必须在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,具体取决于它是否在内部。
我的问题是,如何获得精确放置在边界中的线段的查询点(在线段与其相交的情况下)?
答案 0 :(得分:1)
如果安装了Mapping Toolbox,则可以使用polyxpoly
。由于这是一个相当基本的问题,因此文件交换中有相当多的免费MATLAB代码。以下是我在搜索字词'polygon intersect'中找到的内容:
找到两个2D多边形边缘的交点,这是一个用于跟进新闻组讨论的简单函数
Curve Intersect 2 SebastianHölz
此文件基于Duane Hanselman的曲线相交功能。它扩展了函数的范围,以处理任意线条/多边形,这些线条/多边形也可能具有垂直线段或具有不增加x值的线段。
虽然FEX中已经存在一些其他函数来计算 曲线的交点,编写了这段短代码 速度是最高优先级。整个过程中没有使用循环, 充分利用MATLAB的矢量化功能
Fast and Robust Curve Intersections
此函数计算两条曲线相交的(x,y)位置。曲线可以用NaN打破或具有垂直段。它也非常快(至少代表我认为是典型应用程序的数据)。
[...]导出新形状:2条线之间的交点,线与圆之间的线,平行线和垂直线