我试图在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段中包含的所有点?谢谢。
答案 0 :(得分:1)
将线段的参数方程P = (1-t) A + t B
与0<=t<=1
一起使用。
找出多边形边和线段支撑线之间的交点,用t
表示交点的位置(暂时忽略t
上的约束)。
您会找到0
或2
个交叉点,而不是更多,因此0
或2
值为t
,形成间隔。解决方案由此区间与区间[0,1]
的交集给出,这是一个基本的1D问题。