怎么利用Matlab绘制一个可爱的南瓜灯
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍怎么利用Matlab绘制一个可爱的南瓜灯,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果及原理效果如下:调一下数据还能改成三角眼:原理南瓜主体函数从知友 [九
千家信息网最后更新 2025年11月07日怎么利用Matlab绘制一个可爱的南瓜灯
这篇文章主要介绍怎么利用Matlab绘制一个可爱的南瓜灯,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
效果及原理
效果如下:
调一下数据还能改成三角眼:
原理
南瓜主体函数从知友 [九章算法] 的一张图而来,大体是瓜身瓜柄分段函数,然后绕着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,Zh=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:3 tMap(:,:)=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,Zh=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 pumpkinclc;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,Zh=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:3 tMap(:,:)=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绘制一个可爱的南瓜灯"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
南瓜
函数
嘴巴
坐标
球面
网格
颜色
小一
可爱
光源
内容
原理
效果
数据
曲面
矩阵
篇文章
原始
主体
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
三级网络技术视频软件那个好
做电脑软件开发怎么样
数据库升级的影响
服务器出租业务的公司
vba字典怎么汇总数据库
贺伟锋软件开发
数据库索引的创建索引
在服务器怎么加一个端口
枣庄商城软件开发服务公司
龙之谷手游服务器价格
软件测试为什么要用数据库校验
绝地求生服务器目前繁忙怎么解决
网络安全问题防范简答题
数据库学编程语言
数据库子窗体不可编辑
现代网络技术和电子商务运营管理
甘肃政法网络安全复试
nas构建服务器
衡水微信软件开发团队
管理linux服务器的用户
江西营销软件开发定做价格
工业网络技术论文格式
惩罚者美剧软件开发
中燃公司有软件开发岗位吗
网络技术机一级证训练题
河北网络安全高校联盟
1万地形测绘数据库图层名称
北仑软件开发公司有哪些
c 小型软件开发
贵定县财政局网络安全