本周文件交换精选

我们最好的用户提交

点到折线或多边形的距离

肖恩本周的选择是点到折线或多边形的距离通过迈克尔Yoshpe

最近我遇到了一个问题,我试图识别一块地产的哪些角落是与街道相连的。

下面是一个例子;多边形存储在相对较新的polyshape类。

负载Polyshapes.matp(1) =情节(很多,“FaceColor”“b”);持有p(2) =情节(街,“FaceColor”, [0.5 0.5 0.5]);xticks ([]) yticks([])([传奇“很多”“街道”])

我研究了方法polyshape和第一个念头nearestvertex才是正确的做法。即给定每个点最近的顶点,计算到它的距离并应用一个阈值。

nidx = nearestvertex(street, lot.Vertices);p(3) =情节(街。顶点(nidx, 1),街道。顶点(nidx, 2),“r *”“DisplayName”“街道上最近的顶点”);

乍一看还不错,但让我们放大一下:

负载zoomlimits.matxlim (xlimits) ylim (ylimits)

最近的顶点是只看街道的顶点。顶点之间可能有很长的距离,所以它可能返回完全没有意义的点,例如街道的远端。我真正需要的是从地块顶点到街道边界的距离。

不幸的是,在计算几何学意义上没有明显的多聚体方法来做这件事。我可以用linspace在每个边界上添加数千个点来增加顶点的数量nearestvertex可以“足够接近”,但这似乎不是解决这个问题的最佳方法。

我搜索MATLAB的答案,偶然这个答案来自MathWorks的技术支持。万博1manbetx这为求到直线的距离提供了一种方法。你可以在街道的所有边界上绕圈,计算出最短的距离,然后在最后保持最小值。相反,我搜索了文件交换,找到了迈克尔的p_poly_dist函数。这正是我所需要的(尽管需要循环顶点而不是边界)。

抓住街道的边界。[xbnd, ybnd] =边界(街道);%循环遍历地段顶点,计算到街道边界的最短距离。2 =大小(很多。p_poly_dist(lot. 0) = p_poly_dist(lot. 0);顶点(2,1),很多。顶点(ii, 2), xbnd, ybnd);结束一个顶点在边界上,如果它在阈值或街道内部。阈值= 2;onborder = ((dists < threshold) | isinterior(street, lot.Vertices); / /让更多的人进入下注区删除(p(3))情节(很多。顶点(onborder, 1),很多。顶点(onborder, 2),“议员”“DisplayName”“街道”) xlim汽车ylim汽车

我还想对点线距离通过里克Wisselink-谁提供输入检查的技术支持答案,并扩展它的工作在多个点。万博1manbetx我没有使用它,因为我不需要3d,在边界上循环比在顶点上循环要多得多。

评论

如果您想在基础MATLAB中使用此功能,请联系MathWorks技术支持,并通过让他们知道这个答案是有用的来添加您的投票!万博1manbetx

试试吧,让我们知道你的想法在这里或者离开评论迈克尔。

发布与MATLAB®R2019a

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。