欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Matlab繪制一個可愛的南瓜燈

 更新時間:2022年02月26日 15:07:27   作者:slandarer  
這篇文章主要為大家介紹了如何利用Matlab繪制一個可愛的南瓜燈!文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下

效果及原理

效果如下:

調(diào)一下數(shù)據(jù)還能改成三角眼:

原理

南瓜主體函數(shù)從知友 [九章算法] 的一張圖而來,大體是瓜身瓜柄分段函數(shù),然后繞著z軸旋轉(zhuǎn)一周得到曲面,我對數(shù)值做了微調(diào),原圖及原始數(shù)據(jù):

實(shí)現(xiàn)方法

這里我故意保留了網(wǎng)格讓南瓜看起來有一點(diǎn)布娃娃的感覺,(大家也可以根據(jù)自己喜好改寫,例如將’EdgeColor’設(shè)置為’none’并打個光啥的)

% 構(gòu)造網(wǎng)格
[t,p]=meshgrid(linspace(0,2*pi,200),linspace(0,pi-.05,200));
% 二元分段函數(shù)
foutline=@(t,p)(p<=.14).*90.*cos(7.*p)+(p>.14).*(cos(20.*t)+70).*(p.*(pi-p+.1)).^.2;

% 球面坐標(biāo)轉(zhuǎn)化為X,Y,Z
h=cos(p).*foutline(t,p);
R=sin(p).*foutline(t,p);
R=R;
X=cos(t).*R;
Y=sin(t).*R;

% 顏色矩陣構(gòu)造
CMap=ones([size(t),3]);
tMap=ones(size(t));
c1=[253,158,3]./255;
c2=[76,103,86]./255;
for i=1:3
    tMap(:,:)=c1(i);
    tMap(p<=.14)=c2(i);
    CMap(:,:,i)=tMap;
end

figure()
surf(X,Y,h,'CData',CMap,'EdgeColor',[0,0,0],'EdgeAlpha',.2)

眼睛嘴巴部分:

這部分我就將一部分曲面上的點(diǎn)設(shè)置為nan,繪制出來的圖像相對應(yīng)地方就是空缺:

% 畫個嘴巴
mask(maskX>50&maskX<100&maskY>130&maskY<140)=nan;
% 矩形眼睛
mask(maskX>45&maskX<65&maskY>90&maskY<100)=nan;
mask(maskX>85&maskX<105&maskY>90&maskY<100)=nan;

% 三角形眼睛
% mask(maskX>45&maskX<70&maskY>90&maskY<100)=nan;
% mask(maskX>80&maskX<105&maskY>90&maskY<100)=nan;
% mask(maskX>45&maskX<70&maskY>90&maskY<100&(maskX-maskY>-35))=1;
% mask(maskX>45&maskX<70&maskY>90&maskY<100&(maskX-maskY(end:-1:1,:)<-55))=1;
% mask(maskX>80&maskX<105&maskY>90&maskY<100&(maskX-maskY>5))=1;
% mask(maskX>80&maskX<105&maskY>90&maskY<100&(maskX-maskY(end:-1:1,:)<-15))=1;


% 球面坐標(biāo)轉(zhuǎn)化為X,Y,Z
h=cos(p).*foutline(t,p);
R=sin(p).*foutline(t,p);
R=R.*mask;
X=cos(t).*R;
Y=sin(t).*R;

發(fā)光:

為了模擬發(fā)光,我在南瓜內(nèi)部繪制了一個小一圈的南瓜并設(shè)置為燈光的顏色:

% 繪制一個小一圈的南瓜頭假裝光源
h=cos(p).*foutline(t,p).*0.95;
R=sin(p).*foutline(t,p).*0.95;
X=cos(t).*R;
Y=sin(t).*R;
surf(X,Y,h,'FaceColor',[248,240,186]./255,'EdgeColor','none')

完整代碼

function pumpkin
clc;clear;

% 構(gòu)造網(wǎng)格
[t,p]=meshgrid(linspace(0,2*pi,200),linspace(0,pi-.05,200));
% 二元分段函數(shù)
foutline=@(t,p)(p<=.14).*90.*cos(7.*p)+(p>.14).*(cos(20.*t)+70).*(p.*(pi-p+.1)).^.2;


mask=ones(size(t));
[maskX,maskY]=meshgrid(1:size(t,1),1:size(t,2));

% 畫個嘴巴
mask(maskX>50&maskX<100&maskY>130&maskY<140)=nan;
% 矩形眼睛
mask(maskX>45&maskX<65&maskY>90&maskY<100)=nan;
mask(maskX>85&maskX<105&maskY>90&maskY<100)=nan;

% 三角形眼睛
% mask(maskX>45&maskX<70&maskY>90&maskY<100)=nan;
% mask(maskX>80&maskX<105&maskY>90&maskY<100)=nan;
% mask(maskX>45&maskX<70&maskY>90&maskY<100&(maskX-maskY>-35))=1;
% mask(maskX>45&maskX<70&maskY>90&maskY<100&(maskX-maskY(end:-1:1,:)<-55))=1;
% mask(maskX>80&maskX<105&maskY>90&maskY<100&(maskX-maskY>5))=1;
% mask(maskX>80&maskX<105&maskY>90&maskY<100&(maskX-maskY(end:-1:1,:)<-15))=1;


% 球面坐標(biāo)轉(zhuǎn)化為X,Y,Z
h=cos(p).*foutline(t,p);
R=sin(p).*foutline(t,p);
R=R.*mask;
X=cos(t).*R;
Y=sin(t).*R;


% 顏色矩陣構(gòu)造
CMap=ones([size(t),3]);
tMap=ones(size(t));
c1=[253,158,3]./255;
c2=[76,103,86]./255;
for i=1:3
    tMap(:,:)=c1(i);
    tMap(p<=.14)=c2(i);
    CMap(:,:,i)=tMap;
end

figure()
surf(X,Y,h,'CData',CMap,'EdgeColor',[0,0,0],'EdgeAlpha',.2)
ax=gca;
hold(ax,'on')
% ax.Color=[0 0 0];

% 繪制一個小一圈的南瓜頭假裝光源
h=cos(p).*foutline(t,p).*0.95;
R=sin(p).*foutline(t,p).*0.95;
X=cos(t).*R;
Y=sin(t).*R;
surf(X,Y,h,'FaceColor',[248,240,186]./255,'EdgeColor','none')

ax.View=[-137.3000 13.9844];

end

以上就是利用Matlab繪制一個可愛的南瓜燈的詳細(xì)內(nèi)容,更多關(guān)于Matlab繪制南瓜燈的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++定義和初始化string對象實(shí)例詳解

    C++定義和初始化string對象實(shí)例詳解

    這篇文章主要為大家介紹了C++定義和初始化string對象實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • C++初始化列表學(xué)習(xí)

    C++初始化列表學(xué)習(xí)

    在C++中,struct和class的唯一區(qū)別是默認(rèn)的克訪問性不同,而這里我們不考慮訪問性的問題,所以下面的代碼都以struct來演示
    2013-09-09
  • C語言實(shí)現(xiàn)簡單猜數(shù)字游戲

    C語言實(shí)現(xiàn)簡單猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++設(shè)計模式之橋接模式(Bridge)

    C++設(shè)計模式之橋接模式(Bridge)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計模式之橋接模式Bridge,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • C語言宏定義容易認(rèn)不清的盲區(qū)梳理

    C語言宏定義容易認(rèn)不清的盲區(qū)梳理

    宏定義是C提供的三種預(yù)處理(宏定義、文件包含、條件編譯)的其中一種,其主要目的是為程序員在編程時提供一定的方便,并能在一定程度上提高程序的運(yùn)行效率
    2022-09-09
  • 基于C++自制屠夫躲貓貓小游戲

    基于C++自制屠夫躲貓貓小游戲

    這篇文章主要為大家詳細(xì)介紹了如何基于C++自制屠夫躲貓貓小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C++重載的奧義之運(yùn)算符重載詳解

    C++重載的奧義之運(yùn)算符重載詳解

    函數(shù)的重載是指利用相同的函數(shù)名設(shè)計一系列功能相近,但是功能細(xì)節(jié)不一樣的函數(shù)接口;因此運(yùn)算符重載也是指對于同一個運(yùn)算符來說,它可以用于實(shí)現(xiàn)不同的功能。下面就一起來理解下運(yùn)算符重載的應(yīng)用吧
    2023-04-04
  • C語言實(shí)現(xiàn)簡單的文本編輯器

    C語言實(shí)現(xiàn)簡單的文本編輯器

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單的文本編輯器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Reactor反應(yīng)器的實(shí)現(xiàn)方法詳解

    Reactor反應(yīng)器的實(shí)現(xiàn)方法詳解

    本篇文章是對Reactor反應(yīng)器的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++程序代碼優(yōu)化的方法實(shí)例大全

    C++程序代碼優(yōu)化的方法實(shí)例大全

    優(yōu)化是一個非常大的主題,本文并不是去深入探討性能分析理論,算法的效率,這篇文章主要給大家介紹了關(guān)于C++代碼優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評論