当前位置:网站首页>指定区域内随机填充圆之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;以下给出两组效果图:

(随机填充颜色且不允许圆穿过边界)

(指定填充颜色且允许圆穿过边界)
当然此功能相对初级,小伙们可根据此版本作为母版进行后续升级,包括可指定任意区域形状、可填充除圆以外的其他图形、指定特定分布的填充(如生成半径正态分布的填充图形等)、三维空间中的随机填充等等。
需要源代码请关注懂科学的程序员公众号,谢谢!
特别说明:若您在学术活动中使用到本文的工作,请注明来源于懂科学的程序员,不胜感激。
边栏推荐
猜你喜欢

Network skills: teach you to install batteries on the router, you can still surf the Internet when the power is cut off!

bitnami/mongodb-sharded在AWS EKS扩展shard失败解决

Gramm Angle field GAF time-series data into the image and applied to the fault diagnosis

Interpretation of EfficientNet: Composite scaling method of neural network (based on tf-Kersa reproduction code)

狗都能看懂的CenterNet讲解及代码复现
![[漏洞问题] log4j漏洞 关于2.17.0升级到2.18.0 方案](/img/f2/2052277ae440279b33248ae51a970f.png)
[漏洞问题] log4j漏洞 关于2.17.0升级到2.18.0 方案

目标检测中的IoU、GIoU、DIoU与CIoU

2DCNN, 1DCNN, BP, SVM fault diagnosis and result visualization of matlab

Hardware Knowledge: Introduction to RTMP and RTSP Traditional Streaming Protocols

Nacos 原理
随机推荐
SENet详解及Keras复现代码
CMDB 腾讯云部分实现
Jenkins pipeline 自动部署实践
Uos统信系统 IP地址以及完整主机名配置
ResNet详解:ResNet到底在解决什么问题?
golang 坐标格式 转换 GCJ02ToWGS84
DenseNet详解及Keras复现代码
有且仅有的三种处理JSON的方法
无监督特征对齐的迁移学习理论框架
Database Skills: Organize SQL Server's Very Practical Scripts
Computer software: recommend a disk space analysis tool - WizTree
生成一个包含日期的随机编码
Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
RuntimeError: You called this URL via POST, but the URL doesn‘t end in a slash and you have APPEND_S
Based on the EEMD + + MLR GRU helped time series prediction
让src文件夹能读取xml文件
VMD结合ISSA优化LSSVM功率预测
用chrome dev tools 强制js注入
事件链原理,事件代理,页面的渲染流程,防抖和节流,懒加载和预加载
狗都能看懂的Self-Attention讲解