最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Matlab實(shí)現(xiàn)繪制中秋山間秋月和皓月當(dāng)空效果

 更新時(shí)間:2022年09月07日 11:57:33   作者:slandarer  
中秋節(jié)還有三天就到了,中秋節(jié)啊,闔家團(tuán)圓的日子。本文將利用Matlab繪制中秋山間秋月和皓月當(dāng)空的動(dòng)態(tài)效果,感興趣的可以了解一下

中秋節(jié)還有三天就到了,中秋節(jié)啊,闔家團(tuán)圓的日子,又有多少人去擺弄電腦甚至打開MATLAB?因此要發(fā)就現(xiàn)在!

繪制效果

月餅繪制,立體月餅繪制,月餅狀統(tǒng)計(jì)圖往年我都已經(jīng)畫過了,那么今年不妨從月亮下手,兩個(gè)動(dòng)態(tài)繪圖奉上。

山間秋月

在好久之前看到童晶老師《Python趣味創(chuàng)意編程》一書中有一山水繪制示例非常驚艷,但用了一些python中有matlab中沒有的函數(shù),一時(shí)手癢就改了個(gè)MATLAB版:

function landScape
% python代碼原作出處:童晶|《Python趣味創(chuàng)意編程》
% MATLAB代碼改寫:slandarer


% axes設(shè)置
ax=gca;
ax.XTick=[];
ax.YTick=[];
ax.XLim=[0,800];
ax.YLim=[0,600];
ax.DataAspectRatio=[1 1 1];
hold(ax,'on');
% =========================================================================
% 顏色預(yù)定義,注意此處是hsv格式
cClouds=[330,25,100];  % 云的顏色
cSky=[220,50,50];      % 天空的顏色
cFurther=[230,25,90];  % 遠(yuǎn)山的顏色
cCloser=[210,70,10];   % 近山的顏色
% =========================================================================
% 繪圖函數(shù)調(diào)用
ax.Color=hsv2rgb(cFurther./[360,100,100]); % 背景為遠(yuǎn)山的顏色
drawSky(cSky,cFurther)                     % 畫出天空顏色漸變效果 
drawClouds(cClouds)                        % 畫出彩色云朵效果
drawMountains(cFurther,cCloser)            % 畫出山脈效果
% =========================================================================
% 功能函數(shù):
% -------------------------------------------------------------------------
% 漸變背景生成函數(shù)
    function drawSky(colSky,colFurther)
        % 顏色由hsv轉(zhuǎn)rgb
        colSky=hsv2rgb(colSky./[360,100,100]);
        colFurther=hsv2rgb(colFurther./[360,100,100]);
        
        %構(gòu)建漸變色網(wǎng)格
        [XMesh,YMesh]=meshgrid(1:800,301:600);
        ZMesh=zeros(size(XMesh));
        CMesh=vColorMat([800,300],[colFurther;colSky]);
        surf(XMesh,YMesh,ZMesh,'CData',CMesh,'EdgeColor','none');
    end
% -------------------------------------------------------------------------
% 云繪制函數(shù)
    function drawClouds(colClouds)
        colClouds=hsv2rgb(colClouds./[360,100,100]);

        % 隨機(jī)噪聲生成
        [X,Y]=meshgrid(linspace(0,1,500));
        CLX=(-cos(X.*2.*pi)+1).^.2;
        CLY=(-cos(Y.*2.*pi)+1).^.2;
        r=(X-.5).^2+(Y-.5).^2;
        alp=abs(ifftn(exp(3i*rand(500))./r.^.8)).*(CLX.*CLY);
        alp=alp./max(alp,[],'all');
        
        CMesh=zeros([size(alp),3]);
        CMesh(:,:,1)=colClouds(1);
        CMesh(:,:,2)=colClouds(2);
        CMesh(:,:,3)=colClouds(3);
        
        % 越向下、云越透明
        dy=(1:500)./500.*0.8+0.2;
        image([0,800],[350,600],CMesh,'AlphaData',alp.*(dy'));
    end
% -------------------------------------------------------------------------
% 山峰繪制函數(shù)
    function drawMountains(colFurther,colCloser)
        [X,Y]=meshgrid(linspace(0,1,800));
        CLX=(-cos(X.*2.*pi)+1).^.2;
        CLY=(-cos(Y.*2.*pi)+1).^.2;
        r=(X-.5).^2+(Y-.5).^2;
        % 8層山
        for i=1:8
            % 每次都生成一次二維隨機(jī)噪聲,并取其中一行的數(shù)據(jù)
            h=abs(ifftn(exp(5i*rand(800))./r.^1.05)).*(CLX.*CLY).*10;
            nh=(8-i)*30+h(400,:);
            if i==1,nh=nh.*.8;end
            hm=ceil(max(nh));
            CMesh=zeros([hm,800,3]);
            
            % 顏色矩陣構(gòu)造,
            tcol=colFurther+(colCloser-colFurther)./8.*(i);
            tcol=hsv2rgb(tcol./[360,100,100]);
            CMesh(:,:,1)=tcol(1);
            CMesh(:,:,2)=tcol(2);
            CMesh(:,:,3)=tcol(3);
            
            % 用nan數(shù)值框出山的輪廓
            alp=ones(hm,800);
            alp((1:hm)'>nh)=nan;
            
            % 繪制山峰
            image([-50,850],[0,hm],CMesh,'AlphaData',alp.*0.98);        
        end
    end
% =========================================================================
% 一個(gè)線性插值的漸變圖生成函數(shù)
    function colorMat=vColorMat(matSize,colorList)
        yList=((0:(matSize(2)-1))./(matSize(2)-1))';
        xList=ones(1,matSize(1));
        % 線性插值
        colorMat(:,:,1)=(colorList(1,1)+yList.*(colorList(2,1)-colorList(1,1)))*xList;
        colorMat(:,:,2)=(colorList(1,2)+yList.*(colorList(2,2)-colorList(1,2)))*xList;
        colorMat(:,:,3)=(colorList(1,3)+yList.*(colorList(2,3)-colorList(1,3)))*xList;
    end
end

本人將代碼再次略作改編,貼合中秋主題,又寫了山間秋月的代碼,能夠動(dòng)態(tài)展示變換的云霧以及慢慢變圓的月亮:

function autumoon_2
% @author : slandarer
% gzh  : slandarer隨筆

% axes設(shè)置
ax=gca;
ax.XTick=[];
ax.YTick=[];
ax.XLim=[0,800];
ax.YLim=[0,600];
ax.DataAspectRatio=[1 1 1];
hold(ax,'on');
% =========================================================================
% 顏色預(yù)定義,注意此處是hsv格式
cFurther=[225,35,70];  % 遠(yuǎn)山的顏色
cCloser=[210,70,10];   % 近山的顏色
cClouds=[250 26 43];   % 云的顏色
cSky=[215 100 18];     % 天空的顏色

% 月亮顏色格式為rgb
cMoon=[253,252,222]./255;
% =========================================================================
% 繪圖函數(shù)調(diào)用
ax.Color=hsv2rgb(cFurther./[360,100,100]); % 背景為遠(yuǎn)山的顏色
drawSky(cSky,cFurther)                     % 畫出天空顏色漸變效果 

% 基礎(chǔ)繪制月亮
t1=linspace(-pi/2,pi/2,100);
t2=linspace(pi/2,3*pi/2,100);
X1=cos(t1).*35;Y1=sin(t1).*35;
X2=cos(t2).*35;Y2=sin(t2).*35;
moonHdl=fill([X1,X2]+600,[Y1,Y2]+500,cMoon,'EdgeColor','none');

% 畫出彩色云朵效果                       
cloudsCMesh=getCloudsCMesh(cClouds);
cloudsAlpha1=getCloudsAlp();
cloudsAlpha2=getCloudsAlp();
cloudHdl=image([0,800],[250,600],cloudsCMesh,'AlphaData',cloudsAlpha1);


drawMountains(cFurther,cCloser)            % 畫出山脈效果
% 隨著時(shí)間變化月亮逐漸變圓
k=linspace(-1,1,100);
for n=1:length(k)
    tX2=X2.*k(n);
    moonHdl.XData=[X1,tX2]+600;
    cloudHdl.AlphaData=cloudsAlpha1+(cloudsAlpha2-cloudsAlpha1).*n./length(k);
    pause(.1)
end
% =========================================================================
% 功能函數(shù):
% -------------------------------------------------------------------------
% 漸變背景生成函數(shù)
    function drawSky(colSky,colFurther)
        % 顏色由hsv轉(zhuǎn)rgb
        colSky=hsv2rgb(colSky./[360,100,100]);
        colFurther=hsv2rgb(colFurther./[360,100,100]);
        
        %構(gòu)建漸變色網(wǎng)格
        [XMesh,YMesh]=meshgrid(1:800,301:600);
        ZMesh=zeros(size(XMesh));
        CMesh=vColorMat([800,300],[colFurther;colSky]);
        surf(XMesh,YMesh,ZMesh,'CData',CMesh,'EdgeColor','none');
    end
% -------------------------------------------------------------------------
% 云繪制函數(shù)
    function CMesh=getCloudsCMesh(colClouds)
        colClouds=hsv2rgb(colClouds./[360,100,100]);
        CMesh=zeros([500,500,3]);
        CMesh(:,:,1)=colClouds(1);
        CMesh(:,:,2)=colClouds(2);
        CMesh(:,:,3)=colClouds(3);
    end
    function Alpha=getCloudsAlp(~,~)
        % 隨機(jī)噪聲生成
        [X,Y]=meshgrid(linspace(0,1,500));
        CLX=(-cos(X.*2.*pi)+1).^.2;
        CLY=(-cos(Y.*2.*pi)+1).^.2;
        r=(X-.5).^2+(Y-.5).^2;
        alp=abs(ifftn(exp(3i*rand(500))./r.^.8)).*(CLX.*CLY);
        alp=alp./max(alp,[],'all');
        dy=(1:500)./500.*0.8+0.2;
        Alpha=alp.*(dy');
    end
% -------------------------------------------------------------------------
% 山峰繪制函數(shù)
    function drawMountains(colFurther,colCloser)
        [X,Y]=meshgrid(linspace(0,1,800));
        CLX=(-cos(X.*2.*pi)+1).^.2;
        CLY=(-cos(Y.*2.*pi)+1).^.2;
        r=(X-.5).^2+(Y-.5).^2;
        % 8層山
        for i=1:8
            % 每次都生成一次二維隨機(jī)噪聲,并取其中一行的數(shù)據(jù)
            h=abs(ifftn(exp(5i*rand(800))./r.^1.05)).*(CLX.*CLY).*10;
            nh=(8-i)*30+h(400,:);
            if i==1,nh=nh.*.8;end
            hm=ceil(max(nh));
            CMesh=zeros([hm,800,3]);
            
            % 顏色矩陣構(gòu)造
            tcol=colFurther+(colCloser-colFurther)./8.*(i);
            tcol=hsv2rgb(tcol./[360,100,100]);
            CMesh(:,:,1)=tcol(1);
            CMesh(:,:,2)=tcol(2);
            CMesh(:,:,3)=tcol(3);
            
            % 用nan數(shù)值框出山的輪廓
            alp=ones(hm,800);
            alp((1:hm)'>nh)=nan;
            
            % 繪制山峰
            image([-50,850],[0,hm],CMesh,'AlphaData',alp.*0.98);        
        end
    end
% =========================================================================
% 一個(gè)線性插值的漸變圖生成函數(shù)
    function colorMat=vColorMat(matSize,colorList)
        yList=((0:(matSize(2)-1))./(matSize(2)-1))';
        xList=ones(1,matSize(1));
        % 線性插值
        colorMat(:,:,1)=(colorList(1,1)+yList.*(colorList(2,1)-colorList(1,1)))*xList;
        colorMat(:,:,2)=(colorList(1,2)+yList.*(colorList(2,2)-colorList(1,2)))*xList;
        colorMat(:,:,3)=(colorList(1,3)+yList.*(colorList(2,3)-colorList(1,3)))*xList;
    end
end

靜態(tài)圖:

皓月當(dāng)空

需要下載mapping toolbox或者直接使用文末壓縮包內(nèi)的moonalb20c.mat文件,該文件是真實(shí)月球表面數(shù)據(jù):

% @author : slandarer
% gzh  : slandarer隨筆

% 數(shù)據(jù)讀取
load moonalb20c.mat

[X,Y,Z0]=sphere(30);
surf(X,Y,Z0,'FaceColor','texturemap','CData',moonalb20c,'EdgeColor','none','FaceAlpha',.5)

% 調(diào)色
colormap gray
fig=gcf;
fig.Color=[0,0,0];
 
% 旋轉(zhuǎn) 
for i=0:(2*pi/200):(4*pi)
    campos([cos(i),sin(i),.5])
    axis off vis3d
    pause(.1)
    drawnow
end

全部文件獲?。?/p>

鏈接:https://pan.baidu.com/s/162CUlO9-33SiNx-7ZemVmA

提取碼:h71f

到此這篇關(guān)于利用Matlab實(shí)現(xiàn)繪制中秋山間秋月和皓月當(dāng)空效果的文章就介紹到這了,更多相關(guān)Matlab中秋內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt?5.9使用VTK顯示點(diǎn)云的詳解詳解

    Qt?5.9使用VTK顯示點(diǎn)云的詳解詳解

    這篇文章主要介紹了Qt?5.9使用VTK顯示點(diǎn)云,主要包括PCL安裝及在VS2013中使用PCL的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Java C++ 算法題解leetcode1582二進(jìn)制矩陣特殊位置

    Java C++ 算法題解leetcode1582二進(jìn)制矩陣特殊位置

    這篇文章主要為大家介紹了Java C++ 算法題解leetcode1582二進(jìn)制矩陣特殊位置示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C語言進(jìn)制轉(zhuǎn)換代碼分享

    C語言進(jìn)制轉(zhuǎn)換代碼分享

    本文給大家分享的是使用C語言實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的代碼,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-07-07
  • Opencv實(shí)現(xiàn)圖像灰度線性變換

    Opencv實(shí)現(xiàn)圖像灰度線性變換

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)圖像灰度線性變換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • c++核心編程之函數(shù)的重載

    c++核心編程之函數(shù)的重載

    這篇文章主要介紹了c++核心編程之函數(shù)的重載,函數(shù)可以重復(fù)使用,提高了復(fù)用性,但前提是必須在一個(gè)作用域并且函數(shù)名稱相同,下面附代碼詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • C語言實(shí)例講解選擇語句的使用

    C語言實(shí)例講解選擇語句的使用

    選擇語句是C語言中的重要組成部分,該部分也比較基礎(chǔ),本文將通過最通俗易懂的方式來為大家做出講解。相信通過本文的學(xué)習(xí),讓大家一舉拿下C語言選擇語句的知識(shí)點(diǎn)
    2022-05-05
  • 解析shell排序的實(shí)現(xiàn)代碼

    解析shell排序的實(shí)現(xiàn)代碼

    本篇文章是對(duì)shell排序的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言八道筆試題精講帶你掌握指針

    C語言八道筆試題精講帶你掌握指針

    C語言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對(duì)指針的掌握是非常重要的,本文將具體針對(duì)指針的基礎(chǔ)做詳盡的介紹
    2022-07-07
  • C語言超詳細(xì)講解循環(huán)與分支語句基礎(chǔ)

    C語言超詳細(xì)講解循環(huán)與分支語句基礎(chǔ)

    各位小伙伴們,今天給大家?guī)淼氖茄h(huán)與分支語句,本篇將會(huì)向大家介紹這些語句的格式和使用的基本方法,感興趣的朋友來看看吧
    2022-04-04
  • 通過C++程序示例理解設(shè)計(jì)模式中的外觀模式

    通過C++程序示例理解設(shè)計(jì)模式中的外觀模式

    這篇文章主要介紹了通過設(shè)計(jì)模式中的外觀模式及相關(guān)的C++程序示例,外觀模式在高層提供了一個(gè)統(tǒng)一的接口實(shí)現(xiàn)一定程度上的解耦,需要的朋友可以參考下
    2016-03-03

最新評(píng)論

昔阳县| 自贡市| 奉节县| 石景山区| 峨眉山市| 信丰县| 肥西县| 西贡区| 阜平县| 堆龙德庆县| 辉南县| 盐山县| 云梦县| 伊金霍洛旗| 罗山县| 上蔡县| 阿瓦提县| 曲水县| 深圳市| 广元市| 临沭县| 长春市| 威信县| 宾阳县| 眉山市| 绥德县| 襄城县| 鄱阳县| 静安区| 聂荣县| 呼图壁县| 溧水县| 海林市| 合山市| 上杭县| 黄大仙区| 衡水市| 海城市| 马尔康县| 昌吉市| 定远县|