前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在matlab矩阵中随机生成圆【含源代码】

如何在matlab矩阵中随机生成圆【含源代码】

作者头像
巴山学长
发布于 2021-03-30 03:39:16
发布于 2021-03-30 03:39:16
2.1K00
代码可运行
举报
文章被收录于专栏:巴山学长巴山学长
运行总次数:0
代码可运行

言归正传,巴山在浏览知乎时邀请我回答上图所示的问题,所幸就点进去看了一眼,并给了解题思路。

该问题所涉及的知点并不多也不难,主要就是如何生成圆以及矩阵赋值操作。因为矩阵是离散数据集,因此对矩阵的大小要有一定的限制,比如在一个2✖2或5✖5的矩阵中生成随机圆显然是没有意义的。

巴山将按以下步骤来解决该问题:

首先,初始化一定大小元素值全为false的逻辑矩阵JZ,并定义一个取值为0到2π的角theta,定义角是因为圆的参数方程要用到。

其次,随机生成圆心和半径,当然都得在矩阵大小范围内,特别提醒,这里的圆心只能取整数值,因为矩阵索引值不能为小数。

最后,根据半径和圆心生成圆的位置坐标并取整,剔除超过矩阵大小范围的位置,将矩阵中对应位置设置为true即可

以下是main函数及子函数randCircle:

main函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% 作者:巴山
% 欢迎关注matlab爱好者公众号

clc;clear;
M = 500;

figure;
JZ  = randCircle(M);
himg = imshow(JZ);
% 更新圆
hold on;
for k = 1:20
    [~,L] = randCircle(M);
    JZ(sub2ind(size(JZ),L(:,2),L(:,1))) = true;
    set(himg,'CData',JZ);
    pause(0.2);
end
hold off;

子函数randCircle:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function [JZ,L] = randCircle(M)

JZ    = false(M,M); 

% 定义圆周角
theta = linspace(0,2*pi,round(M*2));

% 定义随机函数
rfun = @(a,b) a+(b-a)*rand;

% 随机圆心和半径
C    = round([rfun(1,M-1),rfun(1,M-1)]);
R    = rfun(5,M*0.15);

% 生成圆
x    = round(C(2) + R*cos(theta))';
y    = round(C(1) + R*sin(theta))';

% 剔除位置小于0的点
loc  = find((x>0) & (y>0));

[m,n] = size(JZ);
nx   =  x(loc)-n;
ny   =  y(loc)-m;
% 剔除位置超出范围的点
nloc  = find((nx<0) & (ny<0));

% 组合坐标
L  = [ny(nloc)+m, nx(nloc)+n];
L  = unique(L,'rows');
% 将符合条件的位置赋值为true
JZ(sub2ind(size(JZ),L(:,2),L(:,1))) = true;

效果图

最后,感谢您的阅读!

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

本文分享自 巴山学长 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mysql高级函数FIND_IN_SET,ENUM和SET,LOCATE,ELT,FIELD,INTERVAL,COUNT,CAST,NULLIF,ISNULL,IFNULL,IF,CONVERT,C
mysql高级函数FIND_IN_SET,ENUM和SET,LOCATE,ELT,FIELD,INTERVAL,COUNT,CAST,NULLIF,ISNULL,IFNULL,IF,CONVERT,COALESCE
oktokeep
2024/10/09
1680
mysql高级函数FIND_IN_SET,ENUM和SET,LOCATE,ELT,FIELD,INTERVAL,COUNT,CAST,NULLIF,ISNULL,IFNULL,IF,CONVERT,C
SQL中的cast()函数「建议收藏」
CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。
全栈程序员站长
2022/08/02
3K0
SQL中的cast()函数「建议收藏」
【数据库原理 | MySQL】一文打通 DDL语句
SQL编程语言是对关系型数据库操作的一套统一标准的语言,全程:Structed Query Language,结构化查询语言
计算机魔术师
2023/03/16
1.5K0
【数据库原理 | MySQL】一文打通 DDL语句
MySQL中Cast函数和操作符学习--MySql语法
本文学习的是MySQL中Cast函数和操作符学习,BINARY操作符将后面的字符串抛给一个二进制字符串。这是一种简单的方式来促使逐字节而不是逐字符的进行列比较。这使得比较区分大小写,即使该列不被定义为 BINARY或 BLOB。BINARY也会产生结尾空白,从而更加显眼。
用户1289394
2021/07/09
1.1K0
mysql简单基础
枚举:enum,enum('男','女'),你男可以用1表示,1对应男,2就是女,这就是枚举。
不断折腾
2019/09/23
9220
mysql简单基础
MySQL笔记之常用用法整理手册
继上一篇博客 《Oracle学习笔记整理手册》之后,我再写一篇Mysql版本的
SmileNicky
2022/05/07
9130
6-数据类型与常见约束
添加外键时在最后加上ON UPDATE CASCADE , ONDELETE CASCADE
Ywrby
2022/10/27
7080
MySQL DDL表操作
通过这条指令,我们可以查看到指定表的字段,字段的类型、是否可以为NULL,是否存在默认值等信
久绊A
2023/04/10
9470
SQL常用脚本大全,建议收藏!
大家好,我是俊欣 。之前我为大家分享过 100个开箱即用 的 Shell 脚本,深受欢迎 。但作为一名数据人,在工作中也会遇到许多比较常用的SQL脚本,今天呢,我就整理总结出来分享给大家,希望能有所帮助。
用户6888863
2022/06/08
1.7K0
SQL常用脚本大全,建议收藏!
Mysql从入门到放弃(三)
insert into 表名(字段1,字段2...) values(值1,值2...)
会呼吸的Coder
2020/02/17
6960
mysql中几个有用的函数
作用:将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示。
跑马溜溜的球
2020/12/07
1.1K0
mysql中几个有用的函数
21个SQL实用脚本
title在和titleofcourtesy进行拼接后符合条件的就只有ID为6,7,8,9的了
SQL数据库开发
2024/04/25
2250
21个SQL实用脚本
Mysql 常用指令总结
基本语句 命令行操作 创建数据库 create database shop charset utf8; 展示数据库 show databases; 使用/删除数据库 use shop ; ​ drop databases shop; ​ drop table tbale 删除表 drop databases if exists shop; 如果shop 存在,则删除,否则报错 查看数据库结构 show databases; 查看表结构 desc stduent; 创建表 create table s
程序员海军
2021/10/08
8110
MySQL数据库(三):数据类型
安装环境: 操作系统版本:RHEL 6.5 版本:MYSQL 5.5 常见的信息种类: 数值型:一般用于体重、身高、成绩、工资 字符型:一般用于姓名、工作单位、通信地址 枚举型:一般用于兴趣爱好、性别 日期时间型:出生日期、注册日期 一、数值类型 1.1整数型 PS:工作中一般使用INT类型就够了 关于整数型字段 -使用UNSIGNED修饰时,对应的字段只保存正数 -数值不够指定宽度时,在左边填空格补位 -宽度仅仅是显示宽度,存数值的大小由类型决定 -使用关键字ZERO
行 者
2018/03/26
2.7K0
MySQL数据库(三):数据类型
MySQL 快速入门(一)
ps:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符,超出报错
HammerZe
2022/03/24
1.6K0
MySQL 快速入门(一)
MySQL函数大全及用法示例(三)
dayofweek(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,odbc标准) mysql> select dayofweek('1998-02-03');   -> 3 weekday(date) 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 mysql> select weekday('1997-10-04 22:23:00');   -> 5 mysql> select weekday('1997-11-05');   -> 2 dayofmonth(date) 返回date是一月中的第几日(在1到31范围内) mysql> select dayofmonth('1998-02-03');   -> 3 dayofyear(date) 返回date是一年中的第几日(在1到366范围内) mysql> select dayofyear('1998-02-03');   -> 34 month(date) 返回date中的月份数值 mysql> select month('1998-02-03');   -> 2 dayname(date) 返回date是星期几(按英文名返回) mysql> select dayname("1998-02-05");   -> 'thursday' monthname(date) 返回date是几月(按英文名返回) mysql> select monthname("1998-02-05");   -> 'february' quarter(date) 返回date是一年的第几个季度 mysql> select quarter('98-04-01');   -> 2 week(date,first) 返回date是一年的第几周(first默认值0,first取值1表示周一是 周的开始,0从周日开始) mysql> select week('1998-02-20');   -> 7 mysql> select week('1998-02-20',0);   -> 7 mysql> select week('1998-02-20',1);   -> 8 year(date) 返回date的年份(范围在1000到9999) mysql> select year('98-02-03');   -> 1998 hour(time) 返回time的小时数(范围是0到23) mysql> select hour('10:05:03');   -> 10 minute(time) 返回time的分钟数(范围是0到59) mysql> select minute('98-02-03 10:05:03');   -> 5 second(time) 返回time的秒数(范围是0到59) mysql> select second('10:05:03');   -> 3 period_add(p,n) 增加n个月到时期p并返回(p的格式yymm或yyyymm) mysql> select period_add(9801,2);   -> 199803 period_diff(p1,p2) 返回在时期p1和p2之间月数(p1和p2的格式yymm或yyyymm) mysql> select period_diff(9802,199703);   -> 11 date_add(date,interval expr type) date_sub(date,interval expr type) adddate(date,interval expr type) subdate(date,interval expr type) 对日期时间进行加减法运算 (adddate()和subdate()是date_add()和date_sub()的同义词,也 可以用运算符+和-而不是函数 date是一个datetime或date值,expr对date进行加减法的一个表 达式字符串type指明表达式expr应该如何被解释  [type值 含义 期望的expr格式]:  second 秒 seconds
哲洛不闹
2018/09/14
8800
MySQL数据库2表的增删改查
每个字段由若干按照某种界限划分的相同数据类型的数据项组成,这里指的数据表中的列,一列就是一个字段
GH
2019/12/12
13.3K0
SQL学习之MYSQL的常用命令和增删改查语句和数据类型
连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码]  创建数据库:create database [库名]  显示所有数据库: show databases;  打开数据库:use [库名]  当前选择的库状态:SELECT DATABASE();  创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......);  显示数据表字段:describe 表名;  当前库数据表结构:show tables;  更改表格     AL
Jetpropelledsnake21
2018/06/14
2.5K0
SQL函数 CAST
SQL CAST函数将表达式的数据类型转换为指定的数据类型。当Expr的数据类型是标准数据类型或标准数据类型(如%Library.String、%Library.Time、%Library.Date或%Library.TimeStamp)的子类时,CAST可以转换该数据类型。
用户7741497
2022/03/28
4K0
【Mysql】mysql命令常用语句
注意数值,字符串,时间 自增,默认,非空,注释 索引,外键 字符集,存储引擎
瑞新
2020/12/07
1.3K0
【Mysql】mysql命令常用语句
相关推荐
mysql高级函数FIND_IN_SET,ENUM和SET,LOCATE,ELT,FIELD,INTERVAL,COUNT,CAST,NULLIF,ISNULL,IFNULL,IF,CONVERT,C
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验