当前位置:网站首页>指定区域内随机填充圆之matlab实现
指定区域内随机填充圆之matlab实现
2022-08-04 05:35:00 【懂科研的程序员】
之前有伙伴在QQ交流群里询问如何在matlab中编程实现上图所示,刨去图中所有修饰,这个听起来相对高级的颗粒堆叠非均相模型实则就是在矩形区域随机填充不同半径大小的圆。再更进一步抽象此问题,就是如何在matlab中绘制圆。那么问题来了,如何唯一表征一个圆呢?
圆的特征要素即圆心与半径,只要知道这两要素即可表征圆,那怎么在matlab中画圆呢?在matlab画圆的方法多种多样,如函数plot、line、rectangle、patch与fill等都可以用于绘制圆。
% 用line函数绘制圆示例
t = linspace(0,2*pi,200);
xc = 0.5;
yc = 0.5;
r = 1.5;
x = xc+r*cos(t);
y = yc+r*sin(t);
line(x,y);
现在已经知道如何画圆了,但图中圆的圆心位置与半径都是各不相同的,为了达到这一效果,matlab中的伪随机数生成器rand函数就可以上场了。通过对rand函数稍加改造,不仅可以随机生成圆的位置,还可以随机设置圆的半径。实现原理非常简单,这里就不再赘诉。小编经过琢磨,将相关功能集成到了名为randCircle的函数中,randCircle函数具有如下功能:
(1) 设定是否允许填充圆相交、相切或独立存在
(2) 指定区域内圆的生成个数
(3) 设定是否允许圆在边界处穿过边界
(4) 指定圆的填充颜色或随机设定
(5) 指定圆的边框粗细 (可支持无边框)
(6) 指定圆面透明度或随机设定
(7) 支持将生成的图像保存为不同格式的高清图像
除了在功能方面表现,randCircle函数的编写上也下足功夫,如默认输入参数设置、输入参数有效性验证、检查是否包含无法识别的参数等matlab函数编写等基本功也是应有尽有,本程序可以为编写其他matlab函数作为参考模版用。本程序执行效率高,在指定区域生成2000个圆,小编的测试结果显示仅需3秒左右。当然,若要保存图片,运行时间会有增加。
主函数:main.m
tic;
clc;clear;close all;
% 宽高
C.wh = [80, 60];
% 半径范围
C.rlim = [0.5, 1.5];
% 定义区域内圆个数
C.num = 2000;
% 最大尝试次数
% C.N = 100;
% 是否随机填充圆面颜色
C.colormType = false;
% 圆面边框粗细
C.linewidth = 0.75;
% 圆面透明度
C.alpha = 1;
% 是否允许圆穿过边界
C.edgeType = true;
% 是否允许重叠
C.overlap = false;
% 是否允许相切
C.tangent = true;
% 是否保存图像
C.isprint = false;
% 图像名称
C.imgname = strcat('matlab爱好者9527');
% 图像格式
C.imgType = '-dpng';
% 图像分辨率
C.imgdpi = 300;
[rinfo,C] = randCircle(C);
toc;
以下给出两组效果图:
(随机填充颜色且不允许圆穿过边界)
(指定填充颜色且允许圆穿过边界)
当然此功能相对初级,小伙们可根据此版本作为母版进行后续升级,包括可指定任意区域形状、可填充除圆以外的其他图形、指定特定分布的填充(如生成半径正态分布的填充图形等)、三维空间中的随机填充等等。
需要源代码请关注懂科学的程序员公众号,谢谢!
特别说明:若您在学术活动中使用到本文的工作,请注明来源于懂科学的程序员,不胜感激。
边栏推荐
- Uos统信系统 Postfix-smtps & Dovecot-imaps
- 读取JDBC配置文件
- VMD combined with ISSA to optimize LSSVM power prediction
- Interpretation of EfficientNet: Composite scaling method of neural network (based on tf-Kersa reproduction code)
- Database: Organize Four Practical SQL Server Scripting Functions
- 【C# - 爬虫】使用Selenium实现爬虫,获取近七天天气信息(包含完整代码)
- HbuilderX 启动微信小程序 无法打开项目
- 把DocumentsandSettings迁移到别的盘
- 类图规范总结
- golang chan
猜你喜欢
用chrome dev tools 强制js注入
软件:给大家推荐一款国产非常好用的效率软件uTools
Software: Recommend a domestic and very easy-to-use efficiency software uTools to everyone
硬件知识:RTMP和RTSP传统流媒体协议介绍
nacos 返回 403 unknown user 太他么坑了 源码解析
CMDB 阿里云部分实现
Hardware Knowledge: Introduction to RTMP and RTSP Traditional Streaming Protocols
电脑知识:台式电脑应该选择品牌和组装,值得收藏
A priori box (Anchor) in target detection
狗都能看懂的Pytorch MAML代码详解
随机推荐
如何在Excel 里倒序排列表格数据 || csv表格倒序排列数据
mysql:列类型之float、double
golang 坐标格式 转换 GCJ02ToWGS84
更改软件的默认安装位置
数组的一些方法
自适应迁移学习核极限学习机用于预测
读取JDBC配置文件
Database Skills: Organize SQL Server's Very Practical Scripts
叔本华的《人生的智慧》感悟
What is the connection between GRNN, RBF, PNN, KELM?
DOM的12中节点类型,通过关系或方法获取DOM节点,渲染到浏览器页面的一些特效功能,获取DOM节点来改变属性,点击图片,切换为所点击的图片为背景图,页面上的表单验证,点击底部导航栏切换界面
元素的增删克隆以及利用增删来显示数据到页面上
更改mysql数据库默认的字符集(mysql 存储 emoji表情)
ffmpeg打开rtsp流应该设置的几个参数
代码小变化带来的大不同
C# 剪裁图片内容区域
Visualization and Animation Technology (3D Visualization)
Operating System Kernel
异步编程之promise,任务队列,事件循环
Logical Address & Physical Address