1效果


2程序说明

其实非常简单,只需要计算出各个顶点位置,并用fill3绘制一个个面出来即可,为了钻石的色彩更加丰富,我们用light函数设置了光照并为fill3创建出的PATCH对象设置了以下属性。

  • FaceAlpha 面透明度
  • EdgeAlpha 边透明度
  • FaceLighting 面照亮方式(是整个面相同颜色还是通过插值不同位置不同颜色)
  • EdgeLighting 边照亮方式(与面照亮方式类似)
  • SpecularStrength 镜面反射的强度
  • DiffuseStrength 散射光的强度
  • AmbientStrength 环境光的强度

其中:
若将PATCH属性由:

faceColor=[0 71 177];
facePara={faceColor./255,'FaceAlpha',0.6,'EdgeColor',faceColor./255.*0.8,'EdgeAlpha',0.3,...'FaceLighting','gouraud','EdgeLighting','gouraud',...'SpecularStrength',0.9,'DiffuseStrength',0.7,'AmbientStrength',0.7};  % 面参数

改为:

faceColor=[237 64 153];
facePara={faceColor./255,'FaceAlpha',0.4,'EdgeColor',faceColor./255.*0.8,'EdgeAlpha',0.2,...'FaceLighting','gouraud','EdgeLighting','gouraud',...'SpecularStrength',0.9,'DiffuseStrength',0.7,'AmbientStrength',0.6}; % 面参数

则钻石变成这个样子:

另:
大家可以猜猜下面这个钻石是咋画的:

3完整代码

function diamond
hold on
ax=gca;
axis equal
grid on
ax.GridLineStyle='--';
ax.LineWidth=1.2;
ax.XLim=[-2,2];
ax.YLim=[-2,2];
ax.ZLim=[-1.8,1.5];
ax.XColor=[1,1,1].*0.4;
ax.YColor=[1,1,1].*0.4;
ax.ZColor=[1,1,1].*0.4;
ax.DataAspectRatio=[1,1,1];
ax.DataAspectRatioMode='manual';
ax.CameraPosition=[-67.6287 -204.5276   82.7879];light('Position',[5,6,5])thetaSet8=linspace(0,2*pi-pi/4,8)';
thetaSet16=linspace(0,2*pi-pi/8,16)';faceColor=[0 71 177];
facePara={faceColor./255,'FaceAlpha',0.6,'EdgeColor',faceColor./255.*0.8,'EdgeAlpha',0.3,...'FaceLighting','gouraud','EdgeLighting','gouraud',...'SpecularStrength',0.9,'DiffuseStrength',0.7,'AmbientStrength',0.7};  % 面参数% faceColor=[237 64 153];
% facePara={faceColor./255,'FaceAlpha',0.4,'EdgeColor',faceColor./255.*0.8,'EdgeAlpha',0.2,...
%       'FaceLighting','gouraud','EdgeLighting','gouraud',...
%       'SpecularStrength',0.9,'DiffuseStrength',0.7,'AmbientStrength',0.6}; % 面参数% 绘制最上方八边形
pntSet1=[cos(thetaSet8),sin(thetaSet8),ones(8,1)];
fill3(pntSet1(:,1),pntSet1(:,2),pntSet1(:,3),facePara{:})% 一圈8个三角形
pntSet2=[cos(thetaSet8+pi/8).*1.3,sin(thetaSet8+pi/8).*1.3,ones(8,1).*0.7];
for i=1:8p1=i;p2=mod(i,8)+1;p3=i;fill3([pntSet1([p1,p2],1);pntSet2(p3,1)],...[pntSet1([p1,p2],2);pntSet2(p3,2)],...[pntSet1([p1,p2],3);pntSet2(p3,3)],facePara{:})
end% 一圈8个四边形
pntSet3=[cos(thetaSet8).*1.7,sin(thetaSet8).*1.7,ones(8,1).*0.3];
for i=1:8p1=mod(i,8)+1;p2=i;p3=p1;p4=p1;fill3([pntSet1(p1,1);pntSet2(p2,1);pntSet3(p3,1);pntSet2(p4,1)],...[pntSet1(p1,2);pntSet2(p2,2);pntSet3(p3,2);pntSet2(p4,2)],...[pntSet1(p1,3);pntSet2(p2,3);pntSet3(p3,3);pntSet2(p4,3)],facePara{:})
end% 一圈16个三角形
pntSet4=[cos(thetaSet16).*1.7,sin(thetaSet16).*1.7,ones(16,1).*0.3];
for i=1:8p1=i;p2=2*i-1;p3=2*i;fill3([pntSet2(p1,1);pntSet4([p2,p3],1)],...[pntSet2(p1,2);pntSet4([p2,p3],2)],...[pntSet2(p1,3);pntSet4([p2,p3],3)],facePara{:})p2=2*i;p3=mod(2*i,16)+1;fill3([pntSet2(p1,1);pntSet4([p2,p3],1)],...[pntSet2(p1,2);pntSet4([p2,p3],2)],...[pntSet2(p1,3);pntSet4([p2,p3],3)],facePara{:})
end% 一圈16个四边角形
pntSet5=[cos(thetaSet16).*1.7,sin(thetaSet16).*1.7,ones(16,1).*0.15];
for i=1:16p1=i;p2=mod(i,16)+1;p3=mod(i,16)+1;p4=i;fill3([pntSet4(p1,1);pntSet4(p2,1);pntSet5(p3,1);pntSet5(p4,1)],...[pntSet4(p1,2);pntSet4(p2,2);pntSet5(p3,2);pntSet5(p4,2)],...[pntSet4(p1,3);pntSet4(p2,3);pntSet5(p3,3);pntSet5(p4,3)],facePara{:})
end
pntSet6=[cos(thetaSet8+pi/8).*0.4,sin(thetaSet8+pi/8).*0.4,ones(8,1).*(-1.15)];% 一圈16个长三角形
for i=1:8p1=i;p2=2*i-1;p3=2*i;fill3([pntSet6(p1,1);pntSet5([p2,p3],1)],...[pntSet6(p1,2);pntSet5([p2,p3],2)],...[pntSet6(p1,3);pntSet5([p2,p3],3)],facePara{:})p2=2*i;p3=mod(2*i,16)+1;fill3([pntSet6(p1,1);pntSet5([p2,p3],1)],...[pntSet6(p1,2);pntSet5([p2,p3],2)],...[pntSet6(p1,3);pntSet5([p2,p3],3)],facePara{:})
end% 一圈8个长四边形
pntSet7=[cos(thetaSet8).*1.7,sin(thetaSet8).*1.7,ones(8,1).*0.15];
for i=1:8p1=mod(i,8)+1;p2=i;p4=mod(i,8)+1;fill3([pntSet7(p1,1);pntSet6(p2,1);0;pntSet6(p4,1)],...[pntSet7(p1,2);pntSet6(p2,2);0;pntSet6(p4,2)],...[pntSet7(p1,3);pntSet6(p2,3);-1.5;pntSet6(p4,3)],facePara{:})end
end

4其他过节可能会用到的程序

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
!!!!点击图片跳转连接!!!!
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

4.1玫瑰花球

4.2樱花树

4.3立体爱心九宫格

4.4立体玫瑰花

4.5水晶爱心

4.6两款相册

-1紫色钻石

抱歉大家我确实不记得具体的参数了,不过下面这份代码大家可以试一下:
这份代码的效果:

需要注意的是,很多角度下并不会产生中间色,只会显示原本的粉色或紫色,只有一部分角度会有很绚丽的颜色,
另:该份代码中对光源的设置设置了两遍:

light('Position',[5,6,5])

这样确实会使钻石某些反射面亮度更高更绚丽。
以下是绘制两遍钻石的代码,大家可以对各个部分数据进行调整以获得更绚丽的效果:

function diamondx2
hold on
ax=gca;
axis equal
grid on
ax.GridLineStyle='--';
ax.LineWidth=1.2;
ax.XLim=[-2,2];
ax.YLim=[-2,2];
ax.ZLim=[-1.8,1.5];
ax.XColor=[1,1,1].*0.4;
ax.YColor=[1,1,1].*0.4;
ax.ZColor=[1,1,1].*0.4;
ax.DataAspectRatio=[1,1,1];
ax.DataAspectRatioMode='manual';
ax.CameraPosition=[-67.6287 -204.5276   82.7879];light('Position',[5,6,5])
light('Position',[5,6,5])faceColor=[0 71 177];
facePara={faceColor./255,'FaceAlpha',0.4,'EdgeColor',faceColor./255.*0.8,'EdgeAlpha',0.2,...'FaceLighting','gouraud','EdgeLighting','gouraud',...'SpecularStrength',0.9,'DiffuseStrength',0.8,'AmbientStrength',0.7}; % 面参数
drawDiamond(facePara)faceColor=[237 64 153];
facePara={faceColor./255,'FaceAlpha',0.4,'EdgeColor',faceColor./255.*0.8,'EdgeAlpha',0.2,...'FaceLighting','gouraud','EdgeLighting','gouraud',...'SpecularStrength',0.9,'DiffuseStrength',0.8,'AmbientStrength',0.7}; % 面参数
drawDiamond(facePara) function drawDiamond(facePara)thetaSet8=linspace(0,2*pi-pi/4,8)';thetaSet16=linspace(0,2*pi-pi/8,16)';% 绘制最上方八边形pntSet1=[cos(thetaSet8),sin(thetaSet8),ones(8,1)];fill3(pntSet1(:,1),pntSet1(:,2),pntSet1(:,3),facePara{:})% 一圈8个三角形pntSet2=[cos(thetaSet8+pi/8).*1.3,sin(thetaSet8+pi/8).*1.3,ones(8,1).*0.7];for i=1:8p1=i;p2=mod(i,8)+1;p3=i;fill3([pntSet1([p1,p2],1);pntSet2(p3,1)],...[pntSet1([p1,p2],2);pntSet2(p3,2)],...[pntSet1([p1,p2],3);pntSet2(p3,3)],facePara{:})end% 一圈8个四边形pntSet3=[cos(thetaSet8).*1.7,sin(thetaSet8).*1.7,ones(8,1).*0.3];for i=1:8p1=mod(i,8)+1;p2=i;p3=p1;p4=p1;fill3([pntSet1(p1,1);pntSet2(p2,1);pntSet3(p3,1);pntSet2(p4,1)],...[pntSet1(p1,2);pntSet2(p2,2);pntSet3(p3,2);pntSet2(p4,2)],...[pntSet1(p1,3);pntSet2(p2,3);pntSet3(p3,3);pntSet2(p4,3)],facePara{:})end% 一圈16个三角形pntSet4=[cos(thetaSet16).*1.7,sin(thetaSet16).*1.7,ones(16,1).*0.3];for i=1:8p1=i;p2=2*i-1;p3=2*i;fill3([pntSet2(p1,1);pntSet4([p2,p3],1)],...[pntSet2(p1,2);pntSet4([p2,p3],2)],...[pntSet2(p1,3);pntSet4([p2,p3],3)],facePara{:})p2=2*i;p3=mod(2*i,16)+1;fill3([pntSet2(p1,1);pntSet4([p2,p3],1)],...[pntSet2(p1,2);pntSet4([p2,p3],2)],...[pntSet2(p1,3);pntSet4([p2,p3],3)],facePara{:})end% 一圈16个四边角形pntSet5=[cos(thetaSet16).*1.7,sin(thetaSet16).*1.7,ones(16,1).*0.15];for i=1:16p1=i;p2=mod(i,16)+1;p3=mod(i,16)+1;p4=i;fill3([pntSet4(p1,1);pntSet4(p2,1);pntSet5(p3,1);pntSet5(p4,1)],...[pntSet4(p1,2);pntSet4(p2,2);pntSet5(p3,2);pntSet5(p4,2)],...[pntSet4(p1,3);pntSet4(p2,3);pntSet5(p3,3);pntSet5(p4,3)],facePara{:})endpntSet6=[cos(thetaSet8+pi/8).*0.4,sin(thetaSet8+pi/8).*0.4,ones(8,1).*(-1.15)];% 一圈16个长三角形for i=1:8p1=i;p2=2*i-1;p3=2*i;fill3([pntSet6(p1,1);pntSet5([p2,p3],1)],...[pntSet6(p1,2);pntSet5([p2,p3],2)],...[pntSet6(p1,3);pntSet5([p2,p3],3)],facePara{:})p2=2*i;p3=mod(2*i,16)+1;fill3([pntSet6(p1,1);pntSet5([p2,p3],1)],...[pntSet6(p1,2);pntSet5([p2,p3],2)],...[pntSet6(p1,3);pntSet5([p2,p3],3)],facePara{:})end% 一圈8个长四边形pntSet7=[cos(thetaSet8).*1.7,sin(thetaSet8).*1.7,ones(8,1).*0.15];for i=1:8p1=mod(i,8)+1;p2=i;p4=mod(i,8)+1;fill3([pntSet7(p1,1);pntSet6(p2,1);0;pntSet6(p4,1)],...[pntSet7(p1,2);pntSet6(p2,2);0;pntSet6(p4,2)],...[pntSet7(p1,3);pntSet6(p2,3);-1.5;pntSet6(p4,3)],facePara{:})endend
end

七夕节快到了,教你用MATLAB绘制blingbling的大钻石相关推荐

  1. MATLAB | 七夕节快到了,还不给朋友安排上这个咕呱小青蛙?

    咕呱,咕呱,咕呱 咕呱,咕呱,咕呱 咕呱,咕呱,咕呱 七夕节到了还不快给你的朋友安排上这只咕呱小青蛙? 基础代码 function gugua ax=gca; ax.DataAspectRatio=[ ...

  2. 七夕节快到了,做个图钉画以及学习下Pillow吧

    又有时间写东西了,最近深感世事并不以人的美好愿望而改变,还是要以积极地心态来适应新变化,多多关心身边的人. 图钉画中一个图钉代表一个像素,所以关键在于像素渣化,降低分辨率,图钉的色彩有限,还需要降低图 ...

  3. 万圣节快到了,一起用MATLAB绘制一个可爱的南瓜灯叭

    效果及原理 效果如下: 调一下数据还能改成三角眼: 原理 南瓜主体函数从知友 [九章算法] 的一张图而来,大体是瓜身瓜柄分段函数,然后绕着z轴旋转一周得到曲面,我对数值做了微调,原图及原始数据: 这里 ...

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

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

  5. 嘘!我有特殊的绕线画技巧,教你用MATLAB绘制另一种绕线画

    实际上该方法是将之前图片三角化的代码进行了一部分改写,能够适用于色块明显,背景色较浅的图像绕线(三角网格)风格生成(这说的不就几乎是卡通形象嘛). 效果图: 图片三角化代码传送门 MATLAB 图片三 ...

  6. 教你使用MATLAB绘制超超超炫丽的烟花!

    效果如下: 步骤 1.随机点生成 我们要构造一个黑色背景,对其添加高斯噪声,然后依据阈值删掉部分噪声,生成一张随机点图片: blackPic=uint8(zeros(800,800)); distPi ...

  7. 七夕节脱单“神助攻”!AI教你写情话

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 允中 发自 凹非寺 量子位 编辑 | 公众号 QbitAI 广大的钢铁直男们,七夕节快 ...

  8. 七夕节送礼怎么让女朋友满意?快来抄作业!

    又是一年一度"孤寡"日,七夕节,也被称为"中国情人节",不买点东西给女神说不过去.但,该买什么呢? 沉思中-- ▲ 淘宝热词 没有人不被这个亘古难题困住的,尤其 ...

  9. 星星爱消除,浪漫七夕节—约会表白神器!

    01 Shawn 最近准备了一项大工程"Creator 组件化游戏开发视频教程之-消灭星星",工程已经完成,就在昨天做了一次工程的录像测试,5分钟做了三种星星消除玩法,请看视频: ...

最新文章

  1. 【开源方案共享】无序点云快速的线段分割算法
  2. 一文图解机器学习的基本算法!
  3. linux压缩文件解压乱码
  4. shell之常用脚本
  5. 玩转NumPy——split()函数使用详解
  6. ELK日志分析平台.1-搭建
  7. [ExtJS5学习笔记]第三十五条 sencha extjs 5 组件查询方法
  8. #nginx# 泛解析大量域名的情况下 将不带www的域名,301到与之对应的www前缀的域名...
  9. python 排列组合速度_Python实现的简单排列组合算法示例
  10. MVP公益活动:编程一小时
  11. 安装WPS办公软件后广告特别多怎么办?【wps广告】全网最详细!!!
  12. win10远程电脑连接
  13. java成员方法tostring_Java 工具类-toString
  14. Linux: 联想小新 Air15 Linux 安装 AX210 网卡驱动
  15. 基于matlab的捷联惯导算法设计及仿真,基于 Matlab 的捷联惯导算法设计及仿真1.doc...
  16. ZOOM视频会议共享声音,Zoom共享屏幕播放视频卡顿,你学会了吗?
  17. Leetcode--用两个栈实现一个队列
  18. 如何根据电脑显卡选择CUDA版本及显卡驱动
  19. SpringCloud从零构建(三)——创建消费者Customer
  20. java毕业设计民航售票管理系统源码+lw文档+mybatis+系统+mysql数据库+调试

热门文章

  1. Fusion 360 - 构造
  2. 支付宝和手机QQ春节红包热战正酣,百度终于出手了
  3. listView进行CheckBox的全选、反选
  4. PyCharm Cookbook by Eric
  5. 苹果heic格式电脑无法显示问题
  6. 普中单片机 独立按键word文档20180923
  7. 和喜欢的女孩聊天要有技巧,想摆脱直男思维就要认真领悟
  8. MacPro2018抹盘重装提示“安装需要下载重要内容。该内容此时无法下载。请稍后再试”问题解决
  9. 【python】python制作 连连看 游戏脚本(二)
  10. python 描边_不可以对路径进行描边处理的是