【问题标题】:Find intersection points between a segment and a convex polygon查找线段和凸多边形之间的交点
【发布时间】:2015-03-01 12:51:00
【问题描述】:

我正在尝试在 MATLAB 中构建一个函数,您可以在其中输入一个 segment(由两个点定义)和一个 polygon(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 上包含的所有点?谢谢。

【问题讨论】:

  • 这个答案应该包含你需要的一切:stackoverflow.com/questions/28657143/…
  • 谢谢@Daniel,但我以前见过类似的问题,但它并没有帮助我解决我的问题。我已经完成了该功能,但我只需要检查段 AB 的所有点,这是我无法做到的。
  • 使用“2D 多边形边缘相交”或类似方法计算相交点。然后,对于交点之间的每一段,检查它是在多边形内部还是外部。

标签: matlab computational-geometry intersection


【解决方案1】:

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

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

您会发现02 交叉点,而不是更多,因此t02 值形成一个区间。解决方案由该区间与区间[0,1] 的交集给出,这是一个基本的一维问题。

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 2011-09-26
    • 2021-11-12
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    相关资源
    最近更新 更多