概述
![d31e33d1147de6582a6e303af925cf74.png](https://file2.kaopuke.com:8081/files_image/20230311/142801743640.png)
本人在MATLAB对某个课题进行研究的过程中,意外发现了用最简单的弧线和直线作螺旋图像的方法。
本文的主要想讲以下内容:
一、是记录和展示这个有趣的现象,用数据可视化展现数学之美
二、是以这个现象为例展现一下对某种事物或者现象的探究过程
——从了解表象在到研究其本质,总结归纳有意义的方法和结论
三、顺带练习练习matlab
PS:先给大家看图,毕竟大多数人都是看个新鲜,当然原理的讲解也是有的,我放在最后面了。
一、效果图:
![e5bc4de4ecf896e0aac556a74e412593.png](https://file2.kaopuke.com:8081/files_image/20230311/142801425821.png)
![32b8eb01b2f7d9d1d46c81cce323d445.png](https://file2.kaopuke.com:8081/files_image/20230311/142801788742.png)
是不是有种抽象画风的感觉
别急还有更酷的
玫瑰花:
![d60a5e8e2ed0828ca2b2126fe4a0a62c.png](https://file2.kaopuke.com:8081/files_image/20230311/142801916673.png)
![f4affab064cd434d603db784a94c55d3.png](https://file2.kaopuke.com:8081/files_image/20230311/142801275434.png)
大风车
![9cb1b3bde38e66891c4680921ad73785.png](https://file2.kaopuke.com:8081/files_image/20230311/142801687805.png)
有点像360极速浏览器,啊哈哈
![108bbf020027cd03919fbc24d7b56094.png](https://file2.kaopuke.com:8081/files_image/20230311/142801138166.png)
五彩棒
![6b6883d624b0ae3570c3120f73664798.png](https://file2.kaopuke.com:8081/files_image/20230311/142801960497.png)
![ab5a639ded83c0077fd1e0aa59830a96.png](https://file2.kaopuke.com:8081/files_image/20230311/142801569968.png)
可以拿来当个APP图标,还凑合
![004cfea73093802a866d19cace7a5235.png](https://file2.kaopuke.com:8081/files_image/20230311/142801917989.png)
像圆形,三角形,正方形,五边形,六边形的迭代图像都可以很简单地作出
![5d558a699df3b5ef00b7dbcd6a864d9f.png](https://file2.kaopuke.com:8081/files_image/20230311/1428011795010.png)
![dd05014d6c1c8163a5a52754cadbe250.png](https://file2.kaopuke.com:8081/files_image/20230311/1428013712311.png)
![2a779b0887889036171afa608d0ec238.png](https://file2.kaopuke.com:8081/files_image/20230311/1428018710112.png)
我个人经过计算得到了五角星的图案,注意是“五角星”
![42bbc5250f95ef468ae59292c70a9486.png](https://file2.kaopuke.com:8081/files_image/20230311/1428017698713.png)
![b29ff26708a7bc80e8d3c144897aea05.png](https://file2.kaopuke.com:8081/files_image/20230311/1428016502214.png)
![d6d05d9833c6fcfaee1e03ac31799183.png](https://file2.kaopuke.com:8081/files_image/20230311/1428015767915.png)
![786a7eadae6c693a30c11c7a8df5a7f6.png](https://file2.kaopuke.com:8081/files_image/20230311/1428015543616.png)
二、原理讲解:
以上所有图案都是在下面这个螺旋线的基础上,复合构造函数作出的
![11bf5a1b28750f963fc8921de8b1c200.png](https://file2.kaopuke.com:8081/files_image/20230311/1428011468517.png)
下面是MATLAB的代码,关键只有第3行和第4行
xv=[2,1,1,2];%初始化设置起点坐标以及方向向量
for i=1:1:50%设置循环次数 [xv,mx,my]=draw_sarc(xv,0.3*i,0.3);%画弧 [xv,mx,my]=draw_sline(xv,0.5);%画直线
end
非常好理解,就是这俩两个语句执行五十次
我们直接看循环里的语句
1.[xv,mx,my]=draw_sarc(xv,R,A);画弧
R是半径,A是圆形角,xv 是起始点的坐标以及向量
2.[xv,mx,my]=draw_sline(xv,L);画线
L是直线的长度,xv是起始点的坐标以及方向
意思就是我们先画一条弧线,然后再在上条弧线的末端接着画一条直线,然后再接着画弧,再画直线,依次递推
比如设置圆心角90°,弧的半径为1,直线的长度为1,执行两次如图
圆弧——直线——圆弧——直线——......
![3a7995d6faafbebf0b97a4c7bbf70f5e.png](https://file2.kaopuke.com:8081/files_image/20230311/1428013744718.png)
OK完成两次
之后循环上百次就可以了
创造绚丽图案的关键在于
不同的图案是由于R,A,L三个参数,以及迭代次数决定的
R,A,L可以是固定的常数,也可以是迭代次数的函数R(i)、A(i)、L(i)
自由调整参数,或者构造函数创造出更多的参数,就可以产生无穷多种的图案
-----------------------------------------------------------------------------------------------------------------------------------------分界线------------------------------------------------------------------------------------------------------------------------------------------
今天更新给大家简单介绍下,这三个R(i)、A(i)、L(i)的几种构造方法,直观易懂
一、首先是最简单的常数型(让这个三个函数为定值)
(一万能脑残尝试法
常数有啥技巧嗯?没有技巧!随便三个数扔进去看
1.开始尝试
R(i)=r(弧的半径) L(i)=l(延长直线的长度) A(i)=a(弧的角度)
我设一个emmm。。。。——233
(1)R(i)=2 L(i)=3 A(i)=3
![f37d602f31b03674fad9b36e99a6e373.png](https://file2.kaopuke.com:8081/files_image/20230311/1428013933519.png)
画一下看看效果,一看这是嘛玩意儿,233果然不靠谱
![dff1957ae1236b99720c8969bcd7f118.png](https://file2.kaopuke.com:8081/files_image/20230311/1428017366520.png)
换一个试试 666,这么6应该可以吧
(2)R(i)=6.66 L(i)=6.66 A(i)=6.66
![3f9340d9813d3207b86e5b24f070e7c2.png](https://file2.kaopuke.com:8081/files_image/20230311/1428015009921.png)
![f2c9fa1ca85ada42b8b074e26c6f4bb5.png](https://file2.kaopuke.com:8081/files_image/20230311/1428018006622.png)
哎呦喂不错呦,有点看头
再来试试把R调大到18,为了让圆更大
(3)R(i)=6.66 L(i)=18 A(i)=6.66
![616cb5efca23caa4e01b746bfedf564e.png](https://file2.kaopuke.com:8081/files_image/20230311/1428011719723.png)
![df0f099d8dffa8791f1e2f6a165bc427.png](https://file2.kaopuke.com:8081/files_image/20230311/1428012325324.png)
2.结论:
直接挑选常数进行作图,简单易操作,虽然尝试次数够多总会出现满意的图像
但是大多情况下往往是杂乱不堪,没有意义的图案,这种方法盲目、效率低下,我们需要总结归纳和分析
(二)模型构建法
1.计算模型
(1)前面的原理讲解介绍了所有的图像都由
弧线——直线——弧线——直线——……
不断首尾相连得到。
通过计算我们可以作出任意的正多边形(三角形、正方形、五边形、六边形、)
R(i)=10 L(i)=5 A(i)=5π/3
我们可以看到A=5π/3,这样作出来就是一个六芒星
![90c3d4e633b34b54b91b4b6611241d30.png](https://file2.kaopuke.com:8081/files_image/20230311/1428015001225.png)
A=2π/5就是一个五边形
![4a4f7d9a5527360b32da1699920af651.png](https://file2.kaopuke.com:8081/files_image/20230311/1428017513626.png)
(2)选择,A=N*(30°、45°、60°)N为正整数、任意构造一个正多边形进入下一步
R(i)=10 L(i)=5 A(i)=5π/3
2.模型旋转
(1)在A上加一个△A微小量,△A约为0.02-0.07左右
比如以前面的六芒星为例
R(i)=10 L(i)=5 A(i)=5π/3+0.05
![2803ff6ab11ec28526b5045712e54bab.png](https://file2.kaopuke.com:8081/files_image/20230311/1428017802627.png)
(2)得到由原来模型不断旋转叠加所作出的图形,每次旋转的角度由△A影响,越大旋转速度越快,为了让做出来的图像更细腻更有有视觉冲击感,建议间隔越小越好,但是这样需要增加迭代的次数至少为N(min)
N(min)=2π/△A
否则图像不完整
当△A=0.02时,N=314(次)
当△A=0.05时,N=125(次),所以上例迭代125次
3.结论
比较完美地解决了常数型构造的作图方法和原理,直接计算得到目标图案,先找到正多边形的模型,再通过增加△A得到旋转图像,但是这样得到的图像都是旋转叠加的图像,无论原有的模型是什么形状,最后得到的图像都大致相同轮廓为圆形、里面密铺弧线、比较单一没什么看点,所以我们需要更复杂的构造函数
二、LR一次函数型(LR的值与i迭代次数一次线性关联)
我的这个作图方法理论上可以作任意的一笔画图像,只要函数构造对了.......
(下面的例子我就先放这了,等着有空回来更新整理,溜了溜了~)
xv=[0,0,1,1];%任意设置起点坐标以及方向向量
for i=1:1:100
L=i;
R=i*i/50;
A=pi*4/3+0.02;
[xv,~,~]=draw_sline(xv,L,"on");%画直线
[xv,~,~]=draw_sarc(xv,R,A);%画弧
end
axis equal;
![755448995199b8e3715430838f6c52ee.png](https://file2.kaopuke.com:8081/files_image/20230311/1428012118328.png)
xv=[0,0,1,1];%任意设置起点坐标以及方向向量
for i=1:1:100
L=i*i/100;
R=i*i/100;
A=pi*5/2+0.02;
[xv,~,~]=draw_sline(xv,L,"on");%画直线
[xv,~,~]=draw_sarc(xv,R,A);%画弧
end
axis equal;
![63a72814342f5082154788ed538acce6.png](https://file2.kaopuke.com:8081/files_image/20230311/1428012325629.png)
![80ff5abacff297d6daab328e1a520d9a.png](https://file2.kaopuke.com:8081/files_image/20230311/1428016419330.png)
draw_sarc()和draw_sline()这俩函数是自己写的,因为研究上的需要,有额外的功能,代码稍长,讲解可能没人愿意看就不贴在这里了,大家可以自己写一下,锻炼锻炼数学表达和编程能力,我写了一个Demo想了解的盆友可以自己下载
链接:https://pan.baidu.com/s/1yGSGcgQVzkFTipJwJA3enQ
提取码:i6xm
评论和私聊的都发了,不知道为什么被知乎系统检测有违规行为,评论也被删了很迷。。。
最后
以上就是自信蜻蜓为你收集整理的matlab旋转图像代码_仅仅两行迭代就能作出这么惊艳的图像的全部内容,希望文章能够帮你解决matlab旋转图像代码_仅仅两行迭代就能作出这么惊艳的图像所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复