如何判斷一個點在多邊形內部?
xv= [0 3 3 0 0]; %x坐標
yv= [0 0 3 3 0];%y坐標
x=1.5;
y=1.5;
in=inpolygon(x,y,xv,yv)
plot(xv,yv,x(in),y(in),'.r',x(~in),y(~in),'.b')
in=1;
xv= [0 3 3 0 0]; %x坐標
yv= [0 0 3 3 0];%y坐標
x=4;
y=4;
in=inpolygon(x,y,xv,yv)
plot(xv,yv,x(in),y(in),'.r',x(~in),y(~in),'.b')
in=0;
===================from 氣象家園
http://bbs.06climate.com/forum.php?mod=viewthread&tid=12340
[lon lat]=meshgrid([97:0.1:107],[21:0.1:30]);
% Z=griddata(gy_locat(:,2),gy_locat(:,3),EOF_used(:,1),lon,lat,'v4');
yunnan=shaperead('yunnan.shp');
isin=inpolygon(lon,lat,yunnan.Lon,yunnan.Lat);
Z(~isin)=NaN;
contourf(lon,lat,Z,30);
shading flat
colorbar
hold on
plot(yunnan.X,yunnan.Y,'-k','linewidth',3)
hold off
=============
http://bbs.06climate.com/forum.php?mod=viewthread&tid=13304
來論壇有段時間了,學了不少東西,今天也分享一個自己的經驗。
今天看到一個帖子matlab中地圖邊界與掩膜(去掉邊界外區域)的實現(基於shape文件)
我也來分享一個畫圖去外邊界的方法,不知道以前的帖子沒有介紹此方法的。
之前發的有個小錯,修改了一下
具體程序如下:
lon_c=69.75:0.5:140.25;
lat_c=14.75:0.5:55.25;
lon_c=ones(82,1)*lon_c;
lat_c=ones(142,1)*lat_c;
lat_c=lat_c';
basemap = shaperead('D:\map\beijing.shp');
for ii=1:size(lat_c,1)%修改這里來個循環,貌似inpolygon變量只能是向量,不能是矩陣
for jj=1:size(lat_c,2)
IN(ii,jj)= inpolygon(lon_c(ii,jj),lat_c(ii,jj),basemap.X,basemap.Y);%進行‘白化’的關鍵函數,具體可參見幫助
end
end
v(IN==0)=nan;
........
[ac ah]=contourfm(lat_c,lon_c,v);
........
對於白化用的函數inpolygon,我目前只應用於一個多邊形的外邊界,至於多個多邊形的地圖(好像上海、浙江是這樣的吧??),沒有試過,不知道效果,大家也可以試一試