matlab 判断网络是在多边形之内,之外还是边界上。papa的儿子

matlab 判断网络是在多边形之内,之外还是边界上。

别人问的一个问题,蛮好。

总结一下。

在matlab中,有一个inpolygon函数,可以判断点是否在多边形之内,

如果一个网格在多边形内,则它的四个顶点都在多边形内。
如果一个网格在多边形外,则它的四个顶点都在多边形外。
如果一个网格在多边形边上,则它的四个顶点有的在多边形内,有的在多边形外。
通过此条件,判断网格是否是in, out,bd.这个过程,可以通过find函数实现。

最终的判断结果

clc
clf

%% main
np=10;
x=[0:np];
y=[0:np];

% bound points
xv=[1.2 7.6 4.5 1.2];
yv=[4.7 2.8 7.8 4.7];


[X,Y]=meshgrid(x,y);

% which points are in the range
[ind]=inpolygon(X,Y,xv,yv);


% find the in, out, bd
flg_ind=double(ind);
tm=flg_ind(1:np,:)+flg_ind(2:(np+1),:);
tm2=tm(:,1:np)+tm(:,2:(np+1));

[ind_in_x,ind_in_y]=find(double(tm2==4));
[ind_out_x,ind_out_y]=find(double(tm2==0));
[ind_bd_x,ind_bd_y]=find(double(tm2>0) & double(tm2<4));



% for output z value
Z=zeros(size(X));
Z_in=ones(size(Z)); % in part
Z_in(~ind)=NaN;
Z_out=zeros(size(Z)); % out part
Z_out(ind)=NaN;

%% output results
% plot grid
mesh(X,Y,zeros(size(X)),'edgecolor','k')
hold on
% plot in part
h_in=surf(X,Y,Z_in);
% alpha(h_in,0.7);
% plot out part
h_out=surf(X,Y,Z_out);
alpha(h_out,0.2);
% plot bd line
plot(xv,yv,'r','linewidth',2)
view(0,90)

% plot in points
plot(X(ind),Y(ind),'bo','MarkerFaceColor','b')
hidden off

% plot in, out, bd grid
plot3(x(ind_in_y)+0.5,y(ind_in_x)+0.5,2*ones(size(ind_in_x)),'gs','MarkerFaceColor','g')
plot(x(ind_out_y)+0.5,y(ind_out_x)+0.5,'yo','MarkerFaceColor','y')
plot(x(ind_bd_y)+0.5,y(ind_bd_x)+0.5,'ms','MarkerFaceColor','m')

axis equal
axis tight


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,以下是四个问题的解答: 1. MATLAB散点边界:您可以使用MATLAB中的boundary函数来计算二维点集的边界。例如,如果您有一个名为x和y的点集,则可以通过以下方式计算边界: ``` k = boundary(x,y); plot(x(k), y(k), 'r', 'LineWidth', 2); ``` 这将会在图形窗口中画出点集的边界,并用红色线条显示。 2. MATLAB 3D散点表面:要在MATLAB中绘制3D散点表面,您可以使用scatter3函数和griddata函数。首先,您需要使用scatter3函数绘制散点图,如下所示: ``` scatter3(x, y, z, 'filled'); ``` 然后,您可以使用griddata函数来插值并生成平滑的表面: ``` [X,Y] = meshgrid(min(x):0.1:max(x), min(y):0.1:max(y)); Z = griddata(x,y,z,X,Y); surf(X,Y,Z); ``` 这将会在图形窗口中绘制出3D散点表面。 3. MATLAB 2D散点边界:如果您有一个2D散点集,您可以使用MATLAB中的alphaShape函数来计算点集的边界。例如,如果您有一个名为x和y的点集,则可以通过以下方式计算边界: ``` pts = [x(:) y(:)]; shp = alphaShape(pts); plot(shp); ``` 这将会在图形窗口中画出点集的边界,并用默认颜色显示。 4. MATLAB散点边界:您可以使用MATLAB中的boundary函数来计算二维点集的边界。例如,如果您有一个名为x和y的点集,则可以通过以下方式计算边界: ``` k = boundary(x,y); plot(x(k), y(k), 'r', 'LineWidth', 2); ``` 这将会在图形窗口中画出点集的边界,并用红色线条显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值