前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >均匀随机排布

均匀随机排布

作者头像
万木逢春
发布2019-05-30 14:56:38
4710
发布2019-05-30 14:56:38
举报
文章被收录于专栏:帮你学MatLab帮你学MatLab

%% 想要在给定区域内随机均匀分布一定数量的点

% 网上有这样的方式

load('usborder.mat','x','y','xx','yy');

figure

plot(x,y,'Color','red'); hold on;

plot(xx,yy,'b--')

cities = 40;

locations = zeros(cities,2);

n = 1;

while (n <= cities)

% 随机产生包络矩形区域内的点

xp = rand*1.5;

yp = rand;

if inpolygon(xp,yp,xx,yy)

% 如果在给定区域内就保留

locations(n,1) = xp;

locations(n,2) = yp;

n = n+1;

end

% 如果不在就继续

end

plot(locations(:,1),locations(:,2),'bo');

% 但是这样并不均匀

%% 有个科学的方式可以在凸多边形中均匀分布点

% 先在三角形内实现均匀

a = [1.0,0.5];

b = [0.7,0.2];

c = [0.3,0.8];

triangle = [a;b;c;a];

% 调用函数分布100个点

points = randTriangle([a;b;c],100);

figure

hold on

axis equal

plot(triangle(:,1),triangle(:,2))

scatter(points(:,1),points(:,2),100,'.')

text(triangle(:,1),triangle(:,2),['a';'b';'c'],...

'FontWeight','bold','FontSize',20)

%% 将凸多边形分割为多个三角形

polygone = [0,0;1,0;10,1;30,8;20,8;0,5] ;

% 调用函数分布100个点

points = randPolygone(polygone,100);

figure

hold on

axis equal

fill(polygone(:,1),polygone(:,2),'cyan','FaceAlpha',0.3)

scatter(points(:,1),points(:,2),100,'.')

text(polygone(:,1),polygone(:,2),['a';'b';'c';'d';'e';'f'],...

'FontWeight','bold','FontSize',20)

%% 但是只适用于凸多边形

load('usborder.mat','x','y','xx','yy');

polygone = [xx,yy];

points = randPolygone(polygone,100);

figure

hold on

axis equal

fill(polygone(:,1),polygone(:,2),'cyan','FaceAlpha',0.3)

scatter(points(:,1),points(:,2),100,'.')

% 可以试试把非凸多边形也进行分割

% 不过这好像不是一个简单问题

相关文件下载链接:https://pan.baidu.com/s/14fAaU4oj_cLXXzO5OJMC_Q

提取码:qz3l

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帮你学MatLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档