指定区域内实现多尺度、多维度2D图形随机填充(如圆、椭圆、多边形)之MATLAB实现

news2024/10/6 18:31:37

N久之前,咱在公众号中分享了如何用MATLAB实现在指定区域内随机填充圆,并将相关功能封装一个名为randCircle函数里面,其可实现的功能如下:
(1) 设定是否允许填充圆相交、相切或独立存在
(2) 指定区域内圆的生成个数
(3) 设定是否允许圆在边界处穿过边界
(4) 指定圆的填充颜色或随机设定
(5) 指定圆的边框粗细 (可支持无边框)
(6) 指定圆面透明度或随机设定
(7) 支持将生成的图像保存为不同格式的高清图像

拿到源代码的伙伴应该会发现randCircle函数其实或多或少是有些问题的,比如,在处理穿过边界的圆时并不真实对越界部分进行切除而且通过坐标轴限制来移到相应的视区效果。再如,生成的图形会出现“串链”现象,如下图所示:
图1 randCircle函数生成的效果图,出现很多“串链”现象很显然这与实际的颗粒堆叠或者说分布是不太相符的,更为致命的是仅支持圆的随机填充,对其他更加复杂的几何图形却无能为力。因此,咱决定基于randCircle函数已有算法进行升级优化。

那升级之后有哪些新有亮点呢?下面将一一为大家解读。
亮点1:函数名称由randCircle更改为randFill以便更加符合实际的应用场景;
亮点2:除了可以填充圆外,还支持填充椭圆、多边形以及它们之间的任意组合,可以这么讲任何图形都可以使用randFill来做二维随机填充或堆叠;
亮点3:引入了周期性边界处理方法,能完成处理周期性边界问题;
亮点4:采用图形逻辑处理方法,完美实现边界处图形的裁切操作,所见即所得,而不是像randCircle函数那样通过限制坐标轴区域来实现;
亮点5:摒弃了randCirle中部分不适宜功能,杜绝发生“串链”现象;
亮点6:创建独立的多边形生成函数并将其参数化,原则上可以生成三边及以上边数的任意随机多边形,如边长随机、图形方位随机等;
亮点7:可多维度控制程序终止,如最大执行次数、颗粒数目、面积分数等等;
亮点8:继承了randCircle函数的所有优点并引入多可选设置项,如控制边界区域是否显示。
接下来就一起来看看使用randFill生成的效果图吧:
图2 随机填充圆图2 随机填充圆
图3 随机填充椭圆图3 随机填充椭圆
在这里插入图片描述图4 随机填多边形
在这里插入图片描述图5 随机填充圆与椭圆
在这里插入图片描述图6 随机填充圆与多边形
在这里插入图片描述图7 随机填充椭圆与多边形
在这里插入图片描述图8 随机填圆、椭圆与多边形
在这里插入图片描述图9 考虑周期性边界的混合填充

实现randFill的算法并不是什么难事,伙伴们稍加努力即可轻松开发出来。

下一版randfill功能预告:
① 支持指定特定分布的填充(如生成半径正态分布的填充图形等)
② 任意区域形状的支持

功能展望:在完美实现二维(2D)空间的所有相关功能后,randFill还将进军三维(3D)空间,实现诸如球体、椭球体、锥体、柱体与多面体等3D图形的随机填充,最终实现2D与3D建模与有限元计算模型联合起来,实现真正的应用。当然,应用场景不限于有限元模拟,其他场景的应用也会逐步开发。划重点:如果相关都得以实现,两三篇SCI都将不是问题。如果您在论文中用到本文的代码,望务必告知咱。

如需本文完整源代码,请关注巴山学长公Z号,回复"填充圆"获取。

感谢您的阅读,有缘再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计基于vuejs的文创产品销售平台appSpringboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【面试题】说说 Promise是什么?如何使用

大厂面试题分享 面试题库 前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 前言 本文主要介绍和总结Promise的作用、使用方式和其对应的一些方法,供大家参考学习,如有写的不准确的地方欢迎大家指出&a…

Android 使用 jni Demo示例

Android 使用 jni Demo示例简介1. NDK的介绍1.1 NDK 简介1.2 NDK 特点2. JNI介绍2.1 JNI 简介2.2 为什么要有 JNI?3. NDK 与 JNI 的关系NDK下载及环境配置1. 使用Android studio SDK Manager下载2.配置NDK2.1 配置环境变量2.2 Android studio配置NDK示例Demo流程1.版…

RabbitMQ - 安装和使用

RabbitMQ - 安装和使用一. 安装二. RabbitMQ的简单使用2.1 创建交换机2.1.1 交换机类型2.1.2 持久化方式2.2 创建队列2.3 绑定交换机和队列2.4 SpringBoot整合2.5 另外一种监听写法一. 安装 一键安装: docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 …

rtl8221b+mcu,2.5g光纤收发器的开发备份

1、rtl8221b是一款2.5g的光电转换的phy 系统的构建如下 为了省成本,不用mac来对接其中的gmii接口直接接光模块 2、mdio和mdc由mcu的gpio来模拟,在csdn上有很多的文章来参考 mdio的参数如下 不想看英文可以参考下面的文章 MDIO(clause 22 与 clause 4…

Java基础之《netty(10)—Reactor三种模式》

一、单Reactor单线程模式 1、工作原理图 2、方案说明 (1)Select是前面I/O复用模型介绍的标准网络编程API,可以实现应用程序通过一个阻塞对象监听多路连接请求。 (2)Reactor对象通过Select监控客户端请求事件&#xf…

一元钱注册 chatGPT账号

文章目录打开 openai chatgpt 主页注册 chatGPT 账号找境外的电话号码激活账号查看服务价格账号注册充值成功参考视频 打开 openai chatgpt 主页 打开之前首先登录 vpn。但是使用 vpn 有可能还是会被告知 当前国家没有开放服务个人建议: 使用美国的 ip 地址我使用…

PIN TO PIN替代GM8775C|DSI转LVDS转换方案芯片CS5518|CS5518完全替代GM8775C

GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单/双通道 LVDS 功能,MIPI 支持 1/2/3/4 通道可选,最大支持 4Gbps 速率。LVDS 时钟频率最高 154MHz, 最大支持视频格式为 FULL HD(1920 x 1200) CS551…

网络安全观察报告

攻击类型分析 2018 年,主要的攻击类型 1 为 SYN Flood,UDP Flood,ACK Flood,HTTP Flood,HTTPS Flood, 这五大类攻击占了总攻击次数的 96%,反射类攻击不足 3%。和 2017 年相比&…

测评报告:文件导入哪家强?

文件导入哪家强? 引子 最近业务上遇到一个场景,需要将一个/多个文本文件导入到与其结构对应的表中。功能需求比较简单,大部分的关系数据库基本都支持这个功能。基于上面的场景把手头上的几款开源数据库和国产数据库的文件导入功能进行了性能对…

【通信基础】TTL、RS232、RS485

TTL1、TTL简介RS2321、RS232基本概念2、DB9串口定义及接线参考3、RS232经典电路4、特点RS4851、RS485简介2、特点3、传输距离4、经典电路5、传输差分电平信号TTL 1、TTL简介 TTL的英文全称是Transisor-Transisor Logic. 翻译过来就是晶体管与晶体管之间的逻辑电路。 TTL电平信…

78.【大二实训--《宿舍管理系统》】

大二实训--《宿舍管理系统》1.在JSP中,如果想要获取后端传过来的数据2.在Dao层我们用数据库的属性给实体类赋值的时候3.在一个Servlet中,如果想要使用多个Service4.字符串yyyy-mm-dd格式转换为Date型5.在设置实体类的时候,属性名开头一定要小…

IDEA创建JavaWeb项目并配置Tomcat

本文教给各位使用IDEA创建web项目,配置tomcat进行访问,好了,下面进入正题 IDEA分为社区版和企业版,区别在于,社区版免费,企业版收费,但有30天免费使用期,到期后会提示你进行激活&am…

MySQL 单表查询

1.简单查询 1.1 SELECT语句 SELECT [DISTINCT] * |字段名1,字段名2,... FROM 表名 [WHERE 条件表达式1] [GROUP BY 字段名 [HAVING 条件表达式2]] [GROUP BY 字段名 [ASC | DESC]] [LIMIT [OFFSET] 记录数]1.2 查询指定字段 SELECT 字段1,字段2,... F…

【深入理解 —— js闭包】

🧁个人主页:个人主页 ✌支持我 :点赞👍收藏🌼关注🧡 文章目录js闭包🎀 什么是闭包?🩰 执行上下文(执行环境)🍧解释闭包的含义&#x…

Linux 黑马

1.1虚拟机介绍1.2VMware Workstation虚拟化软件 下载CentOS; 5分钟教你下载安装VMware16虚拟机(含许可证密钥)【全免费VMware虚拟机 上集】_哔哩哔哩_bilibili 1.3远程链接Linux系统 &FinalShell 1.4拓展WSL(Ubuntu)环境 Win11>可选功能>…

愿你被这个世界温柔以待(第二十课)最优秀的仓库Gitee

愿你被这个世界温柔以待(第二十课)最优秀的仓库Gitee 在追梦的道路上 相信自己一定能变的更加优秀 看下面操作流程图:如果你觉自己的学习能力很强跟着下面的流程图片去走 图片教学 上传一份项目如何做 下面的是图片教学 看到上面的图片操作可能看不懂 Giteej基本操作命令行 初…

Photoshop简单案例(9)——利用PS去水印的四种方法

目录一、项目介绍二、简单水印2.1 水印原图2.2 去除步骤2.3 去除效果三、文件水印3.1 水印原图3.2 去除步骤3.3 去除效果3.4 拓展四、内容识别法4.1 水印原图4.2 去除步骤4.3 去除效果一、项目介绍 本文将介绍利用PhotoShop去水印的四种方法。 二、简单水印 2.1 水印原图 对…

我敢打赌,90%的测试人员都不理解Git

01 概念 1、Git本地有四个工作区域: 工作目录(Working Directory) 暂存区(Stage/Index) 资源库(Repository或Git Directory) git仓库(Remote Directory) 文件在这四…

深度学习设计模式(一):编写高质量代码的基础(多例子+代码)

学习如何编写高质量代码前言面向对象面向对象编程,面向对象编程语言面向对象分析 ,面向对象设计封装,抽象,继承,多态封装抽象继承多态面向对象比面向过程有哪些优势,面向过程过时了?什么是面向过…