各种类型网站建设口碑好,wordpress 获取分类id,养老网站建设,郑州前端培训机构排名文章目录0.引言1.原理2.代码及实用教程0.引言 \qquad点与多边形的关系无非三种——内部、上、外部。本文定义点在多边形内部距离为负#xff0c;点在多边形边上距离为0#xff0c;到多边形外部距离为正。
1.原理
计算点到多边形的距离分为3个步骤#xff1a;
判断点与多边…
文章目录0.引言1.原理2.代码及实用教程0.引言
\qquad点与多边形的关系无非三种——内部、上、外部。本文定义点在多边形内部距离为负点在多边形边上距离为0到多边形外部距离为正。
1.原理
计算点到多边形的距离分为3个步骤
判断点与多边形的关系计算点到多边形每条边的最短距离得到最终的距离标量含符号
关于原理方面由于以下链接已经讲解地非常完美本文不再摘录 求点到多边形的距离 需要提醒读者的是该文中存在部分笔误的情况但原理部分比较通俗易懂例如 蓝线处应为d[0]-a[0],d[1]-a[0]
2.代码及实用教程
function minD dis2poly(p,poly)
% 计算点p到多边形poly的最短距离
% poly的每一行都是一条边if inpolygon(p(1),p(2),poly(:,1),poly(:,2))k -1; % 内部为负elsek 1; % 外部为正endminD Inf;for i 1:size(poly,1)-1 % 边序号D dis2edge(p,poly(i,:),poly(i1,:));if D minDminD D;endendminD k*minD;function d dis2edge(P,A,B)% P为计算点,A、B为边的两个顶点 % 三者均为列向量AB B-A;AP P-A;BP P-B;t (AB*AP)/(AB*AB);if t0d norm(AP); elseif 0t t1d norm(P-t*AB);elsed norm(BP);endend
end\qquad输入多边形时需要多边形是封闭的即第一个点与最后一个点相同否则MATLAB的判定点是否在多边形内部的函数inpolygon会返回意料之外的结果。以下是2个计算示例 clearpoly [0,0;0,1;1,1;1,0];P [2;2];dis2poly(P,poly)ans 1.4142从上图也可以看出显然最短距离是2\sqrt22 clearpoly [0,0;0,1;1,1;1,0];P [0.5;0.5];dis2poly(P,poly)ans -0.5000点在多边形内部很显然最短距离为0.5符号为负。