为了方便大家对南瓜灯进行不同表情绘制,这里搞了个更方便diy的版本

使用方式就是先点击figure2(黑白图的那个窗口),上下左右键移动红叉,空格键绘制黑点或白点(将南瓜雕刻或修补),南瓜的曲面会同步调整,数据也会被同步存到mask.mat,下次打开还是你创作的样子。

若是想恢复基础版本,只需要删除mask.mat文件即可。
以下是完整代码:

function pumpkinSL
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;if ~exist('mask.mat')save mask.mat mask;
elsemask=load('mask.mat');mask=mask.mask;
end% 球面坐标转化为X,Y,Z
h=cos(p).*foutline(t,p);
Ro=sin(p).*foutline(t,p);
R=Ro.*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;
endfig1=figure();
ax1=gca;
ppkHdl=surf(ax1,X,Y,h,'CData',CMap,'EdgeColor',[0,0,0],'EdgeAlpha',.2);
hold(ax1,'on')
ax1.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(ax1,X,Y,h,'FaceColor',[248,240,186]./255,'EdgeColor','none')
ax1.View=[-137.3000 13.9844];fig2=figure();
ax2=gca;
hold(ax2,'on')
axis equal
ax2.XLim=[0,201];
ax2.YLim=[0 201];
ax2.YDir='reverse';
[x,y]=find(isnan(mask));
surfHdl=scatter(ax2,y,x,5,'s','filled','CData',[0 0 0]);
position=[100,100];
posHdl=scatter(ax2,position(1,1),position(1,2),150,'rx');set(fig2,'KeyPressFcn', @key)function key(~,event)switch event.Keycase 'uparrow'position=position+[0,-1];case 'downarrow'position=position+[0,1];case 'leftarrow'position=position+[-1,0];case 'rightarrow'position=position+[1,0];   case 'c'position=[0,0];case 'space'if isnan(mask(position(1,2),position(1,1)))mask(position(1,2),position(1,1))=1;elsemask(position(1,2),position(1,1))=nan;end[x,y]=find(isnan(mask));surfHdl.XData=y;surfHdl.YData=x;R=Ro.*mask;X=cos(t).*R;Y=sin(t).*R;ppkHdl.XData=X;ppkHdl.YData=Y;save mask.mat mask;endposition(position<1)=1;position(position>200)=200;posHdl.XData=position(1,1);posHdl.YData=position(1,2);endend

MATLAB版本万圣节南瓜灯二创(方便diy版)相关推荐

  1. Faster R-CNN的安装及测试(Python版本和Matlab版本)

    rbg的Python版本 一.拉取源码 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 拉取完成后,在/h ...

  2. NSGA3算法及其MATLAB版本实现(转载)

    wayjj的博客 "NSGA3算法及其MATLAB版本实现" https://blog.csdn.net/wayjj/article/details/78954506 一丶NSGA ...

  3. NSGA3算法及其MATLAB版本实现

    NSGA3算法及其MATLAB版本实现 一丶NSGA3和NSGA2的一些参考资料 其实我在github上找到了NSGA3 matlab实现的一个非常好的版本,大家可以我的主页去下载,MOEAs,希望对 ...

  4. OTB官方评估代码matlab版本

    OTB最初就是MATLAB版本评估,后来又推出了python版本,不过精度貌似没有matlab高 python版本配置可以参考我另一篇博客:OTB官方评估代码python版本 tracker_benc ...

  5. 用matlab和RTB做二连杆机械臂动力学建模

    文章目录 写在前面 二连杆机械臂 RTB建模 仿真与验证 源代码 写在前面 本文使用的工具为matlab以及Peter Corke的RTB(Robotics Toolbox).基于RTB 10.3.1 ...

  6. 基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY

    DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY 正式DIY 一.本文参考的国外DIY项目 二.本文采用的模块和连接线路 1.ES ...

  7. 【Matlab编程实现常见小问题之二】Matlab如何实现QR二维码的生成与识别

    本篇文章中,旨在解决如何用Matlab编程实现QR二维码的生成与识别.编程环境是Matlab2012a,所用的开源库是ZXing,ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目 ...

  8. 基于卷积神经网络的手写汉字识别[matlab版本][可识别509类汉字]

    基于卷积神经网络的手写汉字识别[matlab版本][可识别509类汉字] ####一. 数据集的获取 数据集的获取来自模式识别国家重点实验室共享,这个不解释直接上网址http://www.nlpr.i ...

  9. Fluent UDF中调用Matlab矩阵运算函数(以二维插值为例)

    Fluent UDF中经常需要用到一些常见算法,例如插值.拟合.矩阵运算等等,这些在UDF中是没有现成函数实现的,理论上需要我们自己去写函数.另一方面我们又注意到这些运算恰恰是Matlab的强项,几乎 ...

最新文章

  1. 前端性能毫秒必争方案(一)HTTP请求
  2. golang适合做什么_这年头中年女人适合做什么兼职
  3. 02-CA/TA编程:aes demo
  4. spring——使用xml声明式事务整合jdbc——GRUD
  5. 普元部署包部署找不到构建_让我们在5分钟内构建和部署AutoML解决方案
  6. Math.round(),Math.ceil(),Math.floor()的区别
  7. pygame做的著名游戏_用Python和Pygame写游戏-从入门到放弃(1)
  8. 嫌多(线程/进程)太慢? 嫌Scrapy太麻烦?没事,异步高调走起!——瓜子二手车
  9. opencv中cvSetCaptureProperty定位不准的原因及解决(转载)
  10. ueditor 编辑器增加css样式_Web入侵之利用编辑器漏洞入侵
  11. neo4j jdbc中文乱码
  12. 所有自然数相加的和是-1/12,你信吗?
  13. c语言的按位取反运算符
  14. 掺钇光纤激光器,自动解算输出波长 RP Fiber Power
  15. 电商之 团购与B2C模式以及B2B2C模式对比
  16. Linux 安装mysql5.7.29源码安装【亲自测试】
  17. 【对接三方平台如何优雅的进行数据校验-validation/valid神器】
  18. 深度调查:内耗不止,Sushiswap内部究竟发生了什么?|链捕手
  19. Android开发之——银联支付初探
  20. tl-wdr7300虚拟服务器怎么设置,TP-Link TL-WDR7300路由器怎么设置?

热门文章

  1. jQuery jQuery鼠标混轮滚动事件
  2. java nonematch_Java 使用anyMatch、allMatch与noneMatch方法
  3. 一条“万圣节妆容”视频获赞64万,快手美妆达人还有哪些出圈机会?
  4. Makefile:wildcard 、notdir和patsubst用法
  5. 用例图USE CASE中的Actor之眼让你不再雾里看花
  6. 转自博客园:随心所欲的Web页面打印技术
  7. 骨传导蓝牙耳机好用吗,五款好用的骨传导耳机推荐
  8. 彻底关闭苹果系统更新_彻底关闭win10更新版本自带的windows defender杀毒软件
  9. ROS利用Python脚本实现多点自主导航
  10. 01编写10个线程,第一个线程从1加到10,第二个线程从11加20…第十个线程从91加到100,最后再把10个线程结果相加。