点到折线或多边形的距离
肖恩本周的选择是点到折线或多边形的距离通过迈克尔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帐户或创建一个新帐户。