当前位置:网站首页>指定区域内随机填充圆之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;
以下给出两组效果图:
(随机填充颜色且不允许圆穿过边界)
(指定填充颜色且允许圆穿过边界)
当然此功能相对初级,小伙们可根据此版本作为母版进行后续升级,包括可指定任意区域形状、可填充除圆以外的其他图形、指定特定分布的填充(如生成半径正态分布的填充图形等)、三维空间中的随机填充等等。
需要源代码请关注懂科学的程序员公众号,谢谢!
特别说明:若您在学术活动中使用到本文的工作,请注明来源于懂科学的程序员,不胜感激。
边栏推荐
猜你喜欢
目标检测中的先验框(Anchor)
如何用matlab做高精度计算?【第二辑】
Online public account article content to audio file practical gadget
Network skills: teach you to install batteries on the router, you can still surf the Internet when the power is cut off!
VMD结合ISSA优化LSSVM功率预测
为什么不使用VS管理QT项目
nacos 返回 403 unknown user 太他么坑了 源码解析
Time Series Forecasting Based on Reptile Search RSA Optimized LSTM
Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
用chrome dev tools 强制js注入
随机推荐
普通用户 远程桌面连接 服务器 Remote Desktop Service
在线公众号文章内容转音频文件实用小工具
基于爬行动物搜索RSA优化LSTM的时间序列预测
叔本华的《人生的智慧》感悟
sql常用函数
目标检测中的先验框(Anchor)
Faster RCNN原理及复现代码
POI及EasyExcel
Prematurely reached end of stream
注册表设置默认浏览器 win7,winserver 2008,winserver 2012
目标检测中的IoU、GIoU、DIoU与CIoU
字符串的一些方法
mysql:列类型之float、double
狗都能看懂的Pytorch MAML代码详解
IE8 打开速度慢的解决办法
数据库:整理四个实用的SQLServer脚本函数
bitnami/mongodb-sharded在AWS EKS扩展shard失败解决
格拉姆角场GAF将时序数据转换为图像并应用于故障诊断
原型图总结规范
硬件知识:RTMP和RTSP传统流媒体协议介绍