从点到折线或多边形的距离
肖恩本周的选择是从点到折线或多边形的距离经过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
与MATLAB®R2019A发布
- 类别:
- 挑选
评论
要发表评论,请点击这里登录您的MathWorks帐户或创建新的。