效果及原理

效果如下:


调一下数据还能改成三角眼:

原理
南瓜主体函数从知友 [九章算法] 的一张图而来,大体是瓜身瓜柄分段函数,然后绕着z轴旋转一周得到曲面,我对数值做了微调,原图及原始数据:


这里我故意保留了网格让南瓜看起来有一点布娃娃的感觉,(大家也可以根据自己喜好改写,例如将’EdgeColor’设置为’none’并打个光啥的)

% 构造网格
[t,p]=meshgrid(linspace(0,2*pi,200),linspace(0,pi-.05,200));
% 二元分段函数
foutline=@(t,p)(p<=.14).*90.*cos(7.*p)+(p>.14).*(cos(20.*t)+70).*(p.*(pi-p+.1)).^.2;% 球面坐标转化为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;% 颜色矩阵构造
CMap=ones([size(t),3]);
tMap=ones(size(t));
c1=[253,158,3]./255;
c2=[76,103,86]./255;
for i=1:3tMap(:,:)=c1(i);tMap(p<=.14)=c2(i);CMap(:,:,i)=tMap;
endfigure()
surf(X,Y,h,'CData',CMap,'EdgeColor',[0,0,0],'EdgeAlpha',.2)



眼睛嘴巴部分:
这部分我就将一部分曲面上的点设置为nan,绘制出来的图像相对应地方就是空缺:

% 画个嘴巴
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;% 球面坐标转化为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;


发光:
为了模拟发光,我在南瓜内部绘制了一个小一圈的南瓜并设置为灯光的颜色:

% 绘制一个小一圈的南瓜头假装光源
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;% 构造网格
[t,p]=meshgrid(linspace(0,2*pi,200),linspace(0,pi-.05,200));
% 二元分段函数
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;% 球面坐标转化为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;% 颜色矩阵构造
CMap=ones([size(t),3]);
tMap=ones(size(t));
c1=[253,158,3]./255;
c2=[76,103,86]./255;
for i=1:3tMap(:,:)=c1(i);tMap(p<=.14)=c2(i);CMap(:,:,i)=tMap;
endfigure()
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绘制一个可爱的南瓜灯叭相关推荐

  1. matlab 绘制一个可爱的胖娃娃

    1 程序说明 这个程序就是用一系列椭圆,圆角矩形及心形拼在起,以下说明一下各部分怎么生成: 椭圆形: 椭圆形是用的如下椭圆数据生成函数生成数据点,之后再用fill函数绘制而成,其中Mu为椭圆中心点,S ...

  2. 【手把手制作三阶魔方模拟器】用MATLAB绘制一个一阶魔方

    [手把手制作三阶魔方模拟器]用MATLAB绘制一个一阶魔方 在三维空间绘制一个正方形 在三维空间绘制一个正六面体 其他 by 今天不飞了 有一个酷爱魔方的朋友,托我给他定制一个专门用于"训练 ...

  3. 用PYthon绘制一个可爱的猪

    可以使用 Python 的绘图库 Matplotlib 来绘制一个可爱的猪.首先需要导入 Matplotlib 中的相关模块,如 pyplot.patches 等.接着可以使用 patches 中的 ...

  4. 中秋节快到了,一起用MATLAB绘制一款2.5D月饼叭

    转眼中秋节就要到了!! 用MATLAB给大家画个月饼: 同时,在这里 提前祝大家中秋快乐!!! 程序其实非常简单哈,只是用一系列plot和fill绘制线条和各种不规则形状拼接起来就好,说是2.5D,只 ...

  5. 用matlab绘制一个时钟

    话不多说,直接上干货 hfig=figure('visible','off'); set(hfig,'NumberTitle','off'); set(hfig,'name','My Clock'); ...

  6. 用MATLAB绘制一个红灯笼

    PART.1 代码说明 这次留的空着实太小,标志就没咋画齐,大家如果有能力可以自己补全,这次的代码依旧使用了椭圆数据生成函数,不过不同的是这次是靠旋转矩阵构造数据点: % 椭圆数据点生成函数 func ...

  7. 蛋糕matlab,用matlab绘制生日蛋糕

    用matlab绘制一个双层的蛋糕,巧克力+抹茶味~ %cake base1 [base1_x base1_y base1_z]=cylinder(0.8,100); surf(base1_x,base ...

  8. matlab 绘制三阶魔方-动态变化

    三阶魔方绘制-动态变化 魔方绘制 魔方绘制可以参考链接: [手把手制作三阶魔方模拟器]用MATLAB绘制一个三阶魔方和 [手把手制作三阶魔方模拟器]用MATLAB让你的魔方动起来. 可以达到的效果为: ...

  9. cosh matlab中怎么写,用MATLAB绘制cosh函数

    matlab如何绘制参数函数的图像? clear;clc;s=0:0.1:pi/2;t=0:0.1:3*pi/2;[s,t]=meshgrid(s,t);x=cos(s).*cos(t);y=cos( ...

最新文章

  1. Keras学习笔记---保存model文件和载入model文件
  2. centos vscode安装到指定目录_win10 WSL构建vscode+centos开发环境
  3. mfc窗口右下角如何显示一个三角形图案_大型建筑,如何做到室内外设计元素统一?...
  4. 爱奇艺java 架构师_爱奇艺个性化实时推荐系统整体流程图 拿去细品
  5. 从扁平到立体:Windows 10 图标的演化
  6. 一文带你了解混淆矩阵!
  7. js判断手机端和pc端
  8. 机器学习代码实战——拆分训练集与测试集(train_test_split)
  9. Struts2接收前端页面数据的方式
  10. 系统背景描述_【通用博世丨智能广播系统】新都芳华微马公园
  11. shell提取sql数据库文件里的单个表
  12. OnlyOffice在线部署
  13. 3D游戏编程——游戏的本质
  14. FITC-PEG-Pyrene,荧光素聚乙二醇芘丁酸,Pyrene-PEG-Fluorescent
  15. 2021-11-13 信道划分介质访问控制ALOHA协议CSMA协议
  16. python3 tkinter 随机答题
  17. luat string常用函数详解
  18. 51nod 3199 操作栈
  19. Java SE(7)
  20. 计算机磁盘为uefi引导,科普一分钟|UEFI引导+GPT硬盘格式装系统方法

热门文章

  1. SD卡学习(SDIO和SPI模式)
  2. TortoiseSVN 如何去掉文件夹左下角的绿色对勾的方法
  3. 五险一金 社保基数 住房公积金基数以及个税(By FlyElephant)
  4. 港科夜闻|香港科大彭倩教授分析疫情下企业如何减低投资损失
  5. 26个思维转换,实现跨越式成长
  6. Untiy学习 简单的脚本方法
  7. 共享充电步入“大三元”时代,三电一兽们吃得饱吗?
  8. 软件测试工程师需要学什么?
  9. Switch 链接OBS Studio输出声音(无延迟)的方法
  10. linux远程管理工具:putty