本周的文件交换选择

我们最好的用户提交

从点到折线或多边形的距离

肖恩本周的选择是从点到折线或多边形的距离经过Michael Yoshpe.

我最近有一个问题,我试图识别产权的哪个角落正在靠近一条街道。

以下是一个例子;多边形存储在相对较新的Polyshape.班级。

加载polyshapes.matp(1)= plot(批次,“facecholor”“b”);抓住p(2)= plot(街道,“facecholor”,[0.5 0.5 0.5]);xticks([])yticks([])传奇([“很多”“街道”])

我看着这些方法Polyshape.和第一个想法referyvertex.将是正确的方法。IE。鉴于每个点的最近的顶点,计算到它的距离并申请阈值。

nidx = refigctvertex(街道,批次);p(3)= plot(Street.vertices(nidx,1),Street.vertices(nidx,2),“r *”“显示名称”“街上最近的顶点”);

起初这看起来很好,但让我们放大:

加载zoomlimits.mat.xlim(xlimits)ylim(ylimits)

最近的顶点只是看一条街头的顶点。沿边界之间的顶点之间可以长距离距离,因此它可以返回绝对没有意义的那些。街道的远侧。我其实需要的是从街道的界限到街道的距离。

不幸的是,在计算几何意义上没有明显的Polyshape方法来做。我可以使用linspace将数千点到每个边界增加到顶点的数量referyvertex.可以“足够接近”,但这似乎是解决这个问题的最佳手段。

我搜索过matlab答案并遇到了这个答案来自Mathworks的技术支持。金宝app这提供了一种用于查找到一行的距离的手段。一个人可以循环街道的所有边界,计算最短距离,然后保持最终的最小值。相反,我搜索了文件交换并找到了Michael的p_poly_dist.功能。它确实确实所需要的(尽管需要循环循环而不是边界)。

%抓住街道的边界。[xbnd,ybnd] =边界(街道);%循环超过批次顶点,计算到街道边界的最短距离。为了II =大小(lot.vertices,1): -  1:1 dists(ii,1)= p_poly_dist(lot.vertices(ii,1),lot.vertices(ii,2),xbnd,ybnd);结尾如果它在阈值或街道内部内,%顶点在边界上。阈值= 2;onborder =(dists “MP”那“显示名称”“在街上”)XLIM汽车ylim.汽车

我也想喊出指向线距离经过Rik Wisselink.- 谁为Tech支持答案提供了输入检查,并将其扩展为多个点工作。金宝app我没有使用它,因为我没有必要3D,循环边界是比循环循环更多的迭代。

评论

如果您希望在Base Matlab中的这种功能,请联系MathWorks技术支持并通过让他们知道这个答案很有用!金宝app

试一试,让我们知道你的想法这里或离开A.评论对于迈克尔。

与MATLAB®R2019A发布

|
  • 打印
  • 发电子邮件

评论

要发表评论,请点击这里登录您的MathWorks帐户或创建新的。