找到线段和凸多边形之间的交叉点

时间:2015-03-01 12:51:01

标签: matlab computational-geometry intersection

我试图在MATLAB中构建一个函数,在其中输入(由两个点定义)和多边形(4个边)通过在数组上指示其顶点。

我有以下代码:

function intersection = intersectSegmentPolygon (s, p)
% Create a vector with X coords of vertices and same for Y coords.
xv = [p(1,1) p(2,1) p(3,1) p(4,1)];
yv = [p(1,2) p(2,2) p(3,2) p(4,2)];
% Read the segment
x = [s.A(1) s.B(1)];
y = [s.A(2) s.B(2)];
[in,on] = inpolygon(x,y,xv,yv);
% Return vectors containing the coords of the intersecting points
intersection = [x(on), y(on)];

我有兴趣获得位置on(交叉点)的点,但显然该函数只检查点A和B(段的初始和最终坐标),我能做什么为了检查AB段中包含的所有点?谢谢。

1 个答案:

答案 0 :(得分:1)

将线段的参数方程P = (1-t) A + t B0<=t<=1一起使用。

找出多边形边和线段支撑线之间的交点,用t表示交点的位置(暂时忽略t上的约束)。

您会找到02个交叉点,而不是更多,因此02值为t,形成间隔。解决方案由此区间与区间[0,1]的交集给出,这是一个基本的1D问题。