搞氣氛!用MATLAB畫(huà)一棵Bling Bling的圣誕樹(shù)

0.前言

圣誕節(jié)了棚瘟,今天推一篇用MATLAB畫(huà)圣誕樹(shù)的现斋,效果如下圖所示:


chris.gif

1.準(zhǔn)備工作

因?yàn)檫@次用的是MATLAB,不像PYTHON一樣需要裝一些依賴(lài)庫(kù)偎蘸,要實(shí)現(xiàn)本文的效果庄蹋,只需安裝MATLAB即可。

2.動(dòng)起手來(lái)

2.1 畫(huà)樹(shù)

要畫(huà)圣誕樹(shù)迷雪,首先...畫(huà)棵樹(shù)蔓肯,然后再想辦法來(lái)點(diǎn)綴它。

close all;clear;clc
% setup
snow=450;    % number of snow flakes [0 .. 5000]
% draw tree
h=0:0.2:25; %vertical grid
[X,Y,Z] = cylinder(tree(h)); %produce a tree formed cylinder
Z=Z*25; %scale to the right heigth
%Add some diffusion to the surface of the tree to make it look more real
treeDiffusion=rand(126,21)-0.5;%some horizontal diffusion data
%add diffusion to the grid points
for cnt1=1:21    
    for cnt2=16:126%starting above the trunk
        %get the angle to always diffuse in direction of the radius
        angle=atan(Y(cnt2,cnt1)/X(cnt2,cnt1));
        %split the diffusion in the two coordinates, depending on the angle
        X(cnt2,cnt1)=X(cnt2,cnt1)+cos(angle)*treeDiffusion(cnt2,cnt1);
        Y(cnt2,cnt1)=Y(cnt2,cnt1)+sin(angle)*treeDiffusion(cnt2,cnt1);
        %some Vertical diffusion for each point
        Z(cnt2,cnt1)=Z(cnt2,cnt1)+(rand-0.5)*0.5;
    end    
end
%draw the tree
h0  = figure('Units','inches');
pos = h0.Position;
pos(1) = 1; pos(2) = 1;
pos(3) = 7; pos(4) = 7;
h0.Position = pos;
surfl(X,Y,Z,'light')

em...這圖看上去似乎有點(diǎn)不可言說(shuō)的美....


tree.jpg

2.2 服道化

下一步振乏,給樹(shù)打個(gè)光,填個(gè)色秉扑,角度調(diào)整一下來(lái)點(diǎn)三維效果慧邮,把坐標(biāo)系顯示去掉,然后一棵綠油油的樹(shù)就出現(xiàn)了舟陆。

%Use as nice green color map (darker at the bottom, lighter at the top)
r=(0.0430:(0.2061/50):0.2491)';%red component
g=(0.2969:(0.4012/50):0.6981)';%green component
b=(0.0625:(0.2696/50):0.3321)';%blue component
map=[r,g,b];%join in a map
for cnt=1:6
    %change the lower part to brown for the trunk
    map(cnt,:)=[77,63,5]/265;
end
colormap(map)%set the map
view([-37.5,4])%Change the view to see a little more of the Actual 3D tree
lighting phong %some nice lighting
shading interp %remove grid and smoothen the surface color
axis equal %takes care of display in the right proportion
axis([-10 10 -10 10 0 30]) %give some more axis space (for the snow later)
axis off %but don't show axis
hold on %to draw the rest
title('Merry Christmas','color','w',...
    'fontsize',25,...
    'fontweight','Bold')

接下來(lái)误澳,把圖像底色調(diào)一下,用一個(gè)五彩斑斕的黑加點(diǎn)星空藍(lán)當(dāng)背景(此處在某甲方選手不斷提出色彩需求后最終確定的顏色秦躯,致謝R湮健)
然后再擺幾個(gè)小禮物盒子在樹(shù)下,這過(guò)節(jié)氣氛杠杠的踱承。



set(gcf,'color',[22 32 51]./255)
% Presents
%Draw some presents around the tree (each with random color)
drawPresent(2,-4,0,3,3,2);
drawPresent(-4,3,0,2,3,1.5);
drawPresent(5,3,0,4,3,3);
drawPresent(-14,-5,0,6,3,1);
drawPresent(-9,-10,0,2,2,2);
drawPresent(0,4,0,4,3,3);
drawPresent(-6,-13,0,3,3,3);

2.3 雪花飄飄

最后倡缠,關(guān)鍵部分,撒點(diǎn)雪花茎活,再畫(huà)點(diǎn)彩燈到圖上昙沦,調(diào)整三維圖像的角度,來(lái)點(diǎn)動(dòng)畫(huà)效果载荔,結(jié)束戰(zhàn)斗盾饮!


chris.jpg
% Snow
%create some random 3D coordinates for the snow (amount as in setup above)
snowX=(rand(snow-100,1)*25-12.5);
snowY=(rand(snow-100,1)*25-12.5);
snowZ=(rand(snow-100,1)*27);
color0 = jet(length(snowX));
%Note:Some flakes will end up IN the tree but just can't be seen then
for ii = 1:length(snowX)
   plot3(snowX(ii),snowY(ii),snowZ(ii),'*','color',color0(ii, :),'markersize',randi(15))%plot coordinates as white snow flakes
   %     plot3(snowX(ii),snowY(ii),snowZ(ii),'*','color',color0(ii, :))%plot coordinates as white snow flakes
end
h=plot3(snowX,snowY,snowZ,'w*');
im = {};
for ii = 1:180
   if mod(ii,3) == 0
       h.Visible = 'off';
       snowX=(rand(snow,1)*25-12.5);
       snowY=(rand(snow,1)*25-12.5);
       snowZ=(rand(snow,1)*27);
       h=plot3(snowX,snowY,snowZ,'w*');
       %         pause(0.25)
   else
       view([ii,4])
       %         pause(0.1)
   end
   if ii > 85
       frame = getframe(gcf);
       im{ii} = frame2im(frame);
   end
end
hold off%Done

2.4 輸出gif文件

此處有知識(shí)點(diǎn)!敲黑板!丘损!如何清除cell數(shù)組中的空元素普办。

im(cellfun(@isempty,im))=[];
file2write = 'chris.gif';
for ii = 1:length(im)
    [A, map] = rgb2ind( im{ii}, 256);
    if ii == 1
        imwrite(A, map, file2write, 'gif','LoopCount',Inf,'DelayTime', 0.12);
    else
        imwrite(A, map, file2write, 'gif','WriteMode','append','DelayTime', 0.12);
    end
end

3.結(jié)論

大功告成。
用MATLAB實(shí)現(xiàn)一個(gè)Bling Bling的圣誕樹(shù)徘钥,祝大家玩得開(kāi)心衔蹲。


chris.gif

關(guān)注公眾號(hào) 海洋紀(jì) ,后臺(tái)回復(fù) 圣誕快樂(lè) 可獲取代碼吏饿。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踪危,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猪落,更是在濱河造成了極大的恐慌贞远,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笨忌,死亡現(xiàn)場(chǎng)離奇詭異蓝仲,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)官疲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)袱结,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人途凫,你說(shuō)我怎么就攤上這事垢夹。” “怎么了维费?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵果元,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我犀盟,道長(zhǎng)而晒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任阅畴,我火速辦了婚禮倡怎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贱枣。我一直安慰自己监署,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布纽哥。 她就那樣靜靜地躺著焦匈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昵仅。 梳的紋絲不亂的頭發(fā)上缓熟,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天累魔,我揣著相機(jī)與錄音,去河邊找鬼够滑。 笑死垦写,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彰触。 我是一名探鬼主播梯投,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼况毅!你這毒婦竟也來(lái)了分蓖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尔许,失蹤者是張志新(化名)和其女友劉穎么鹤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體味廊,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒸甜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了余佛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柠新。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辉巡,靈堂內(nèi)的尸體忽然破棺而出恨憎,到底是詐尸還是另有隱情,我是刑警寧澤郊楣,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布憔恳,位于F島的核電站,受9級(jí)特大地震影響痢甘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茉贡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一塞栅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腔丧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至衣厘,卻和暖如春如蚜,著一層夾襖步出監(jiān)牢的瞬間压恒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工错邦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留探赫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓撬呢,卻偏偏與公主長(zhǎng)得像伦吠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子魂拦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容