前几天有伙伴在公众号后台发送“冰墩墩”,想必这些伙伴期待着咱公众号也能出一个有关冰墩墩的文章,今天她来了!!!
在绘制之前,特意在网上搜索了一番,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