怎么利用Matlab绘制一个可爱的南瓜灯
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要介绍怎么利用Matlab绘制一个可爱的南瓜灯,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果及原理效果如下:调一下数据还能改成三角眼:原理南瓜主体函数从知友 [九
千家信息网最后更新 2025年01月17日怎么利用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安全错误
数据库的锁怎样保障安全
mc为什么一直在定位服务器
华阴市公安局网络安全大队
数据库中的码和键
热血传奇选择服务器满员
winsdk软件开发
asp通过数据库制作折线图
学软件开发的项目心得怎么写
海康威视存储服务器登陆地址
淇县软件开发有限公司
文明上网网络安全黑板报
软件开发职业认知报告
中国网络安全日是哪天
山西服务器机柜销售公司
广西中乃长网络技术有限公司
福建管理软件开发价格
服务器管理系统用户手册
网络安全立法心得
软件开发培训速成
零基础自学手机软件开发
vr属于软件开发嘛
京麟网络安全
阿里云香港服务器域名dns
内蒙古驭驰互联网科技
口令服务器找到但是无效
数据库图片导出excel
软件开发就业2017
边缘传输服务器
广教版网络技术应用教学参考
管理服务器的工作
管理员可以更改服务器吗