matlab练习程序(射线法判断点与多边形关系)依然是计算⼏何。
射线法判断点与多边形关系原理如下:
从待判断点引出⼀条射线,射线与多边形相交,如果交点为偶数,则点不在多边形内,如果交点为奇数,则点在多边形内。
原理虽是这样,有些细节还是要注意⼀下,⽐如射线过多边形顶点或射线与多边形其中⼀边重合等情况还需特别判断。
这⾥就不特别判断了,因为我只是熟悉原理,并不是实际运⽤。
好吧,我实际是太懒了,不想判断了。
结果如下:
结果图和线性分类器的组合有⼏分相似。如何用matlab将已知点连线
matlab代码如下:
clear all;close all;clc;
polyn=20;
poly=rand(polyn,2);
poly=createSimplyPoly(poly); %创建简单多边形
polyn=polyn+1; %连线⽅便,把第⼀个点添加到最后⼀个点后⾯
poly(polyn,:)=poly(1,:);
pn=500;
p=rand(pn,2);
hold on;
for i=1:pn
flag=0;
for j=2:polyn
x1=poly(j-1,1); %多边形前后两个点
y1=poly(j-1,2);
x2=poly(j,1);
y2=poly(j,2);
k=(y1-y2)/(x1-x2); %多边形⼀条边直线
b=y1-k*x1;
x=p(i,1); %过当前点直线和多边形交点
y=k*x+b;
if min([x1 x2])<=x && x<=max([x1 x2]) && ... %点同时在射线和多边形边上 min([y1 y2])<=y && y<=max([y1 y2]) && y>=p(i,2)
flag=flag+1;
end
end
if mod(flag,2)==0 %偶数则在外部
plot(p(i,1),p(i,2),'r.');
else %奇数则在内部
plot(p(i,1),p(i,2),'g.');
end
end
plot(poly(:,1),poly(:,2));
其中createSimplyPoly函数在可以到。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论