既然一“墩”难求,那咱就用MATLAB画个冰墩墩

2022-03-29 21:24:58 浏览数 (1)

前几天有伙伴在公众号后台发送“冰墩墩”,想必这些伙伴期待着咱公众号也能出一个有关冰墩墩的文章,今天她来了!!!

在绘制之前,特意在网上搜索了一番,python和matlab绘制冰墩墩的源代码都有,画出效果也是可圈可点。归纳网上的python与matlab绘制冰墩墩规则,基本上就是用椭圆、圆以及桃心拼装出一个“冰墩墩”。这种方式看似简单,但实际操作起来并不容易,我也不想去照搬照抄别人的东西,因此决定另辟蹊径,直接“画”出冰墩墩。既然是画,就离不开神仙工具Photoshop,并以百度百科词条中冰墩墩实物图作为蓝本进行描摹。

(来源:百度百科冰墩墩)

通过PS描摹得到冰墩墩的轮廓线,然后通过matlab编程提取轮廓线坐标,有了坐标就可以完美动态展示任何一个想要绘制的部分,还能实现图形的矢量化操作。不知道如何用matlab提取轮廓线坐标伙伴,可以参看matlab爱好者公众号之前推送的文章(matlab任意图形轮廓坐标提取【含源代码】)。

整个绘制过程,主要涉及到plot和patch两个matlab绘图函数,整个冰墩墩被划分成60个小部分,包括所有冰墩墩部位、北京2022年冬奥会会徽、奥运会会徽以及各个文字,全部实现了坐标化。在细节表现上自认为比目前搜到的所有matlab及python绘制的都更加完美,下图是matlab爱好者版冰墩墩,大家可以自行比对。

当然,也制作了一个动态绘制冰墩墩的视频,让伙伴体验一下用matlab绘制冰墩墩的乐趣:

视频时长:1分27秒

背景音乐来源:bilibili.com/video/BV1Aq4y187z5

http://mpvideo.qpic.cn/0bc364acqaaatqaelwikwbrfb56dfd3qakaa.f10002.mp4?dis_k=e972cbc9848e93c48490aca9e55a1d23&dis_t=1648560206&vid=wxv_2269257192652537865&format_id=10002&support_redirect=0&mmversion=false

部分代码展示

代码语言:javascript复制
clc;clear;close all;
% 自定义figure属性
figure('Position',[518 51 1003 971],'Name','冰墩墩 (Bing DwenDwen) —— matlab爱好者','NumberTitle','off','Color','w','Menubar','none');

% 自定义坐标轴位置
axes('Position',[0.01 0.01 0.99 0.99]);
axis equal;
% 设置坐标轴范围
xlim([0 6500]);
ylim([0 6500]);
% 设置Y轴方向
set(gca,'YDir','reverse');

axis off;

hold on;  

%% 绘制相关参数设置
spd       = 6;     % 控制绘制速度

lineWidm  = 1.5;   % 普通线粗
lineWidf  = 4.5;   % 脸线线粗
lineWidl  = 0.7;   % 会标线粗

malpha    = 0.90;  % 设置普通透明度
dongAlpha = 0.98;  % 设置冬的透明度

load('bdd.mat');
len = length(bdd);

由于网上已有现成绘制冰墩墩的相关代码,而本文分享的也没有什么技术含量,就不给大家分享源代码了,伙伴们可以自行使用PS去自定义心目中的冰墩墩。雪容融正在来的路上,敬请期待.......

参考资料:

[1] baike.baidu.com/item/冰墩墩/23759017

[2] baike.baidu.com/item/奥运会会徽/930856

[3] baike.baidu.com/item/北京2022年冬奥会会徽/59199395

0 人点赞