效果如下:
【资料图】
原理
玫瑰绘制
要画花球我们要先会绘制一朵花: 如何画一朵花可以看看这篇:MATLAB 3D玫瑰花绘制
三维坐标变化
主要用下面的坐标变化方法:
正十二面体球
想像这里有一个正十二面体球,我们把每一面放上一朵花,也就是说每两朵花之间夹角是pi-acos(-1/sqrt(5)),我们可以通过多次x轴旋转和多次z轴旋转将每朵花放到合适的角度
完整代码
function roseBallclear;clc%曲面数据计算%==========================================================================[x,t]=meshgrid((0:24)./24,(0:0.5:575)./575.*20.*pi+4*pi);p=(pi/2)*exp(-t./(8*pi));change=sin(15*t)/150;u=1-(1-mod(3.6*t,2*pi)./pi).^4./2+change;y=2*(x.^2-x).^2.*sin(p);r=u.*(x.*sin(p)+y.*cos(p));h=u.*(x.*cos(p)-y.*sin(p));%颜色映射表%==========================================================================hMap=(h-min(min(h)))./(max(max(h))-min(min(h)));col=size(hMap,2);colorList=[0.0200 0.0400 0.3900 0 0.0900 0.5800 0 0.1300 0.6400 0.0200 0.0600 0.6900 0 0.0800 0.7900 0.0100 0.1800 0.8500 0 0.1300 0.9600 0.0100 0.2600 0.9900 0 0.3500 0.9900 0.0700 0.6200 1.0000 0.1700 0.6900 1.0000];% colorList=[0.2100 0.0900 0.3800% 0.2900 0.0700 0.4700% 0.4000 0.1100 0.4900% 0.5500 0.1600 0.5100% 0.7500 0.2400 0.4700% 0.8900 0.3200 0.4100% 0.9700 0.4900 0.3700% 1.0000 0.5600 0.4100% 1.0000 0.6900 0.4900% 1.0000 0.8200 0.5900% 0.9900 0.9200 0.6700% 0.9800 0.9500 0.7100];colorFunc=colorFuncFactory(colorList);dataMap=colorFunc(hMap");colorMap(:,:,1)=dataMap(:,1:col);colorMap(:,:,2)=dataMap(:,col+1:2*col);colorMap(:,:,3)=dataMap(:,2*col+1:3*col); function colorFunc=colorFuncFactory(colorList) xx=(0:size(colorList,1)-1)./(size(colorList,1)-1); y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3); colorFunc=@(X)[interp1(xx,y1,X,"linear")",interp1(xx,y2,X,"linear")",interp1(xx,y3,X,"linear")"]; end%曲面旋转及绘制%==========================================================================surface(r.*cos(t),r.*sin(t),h+0.35,"EdgeAlpha",0.05,... "EdgeColor",[0 0 0],"FaceColor","interp","CData",colorMap)hold onsurface(r.*cos(t),r.*sin(t),-h-0.35,"EdgeAlpha",0.05,... "EdgeColor",[0 0 0],"FaceColor","interp","CData",colorMap)Xset=r.*cos(t);Yset=r.*sin(t);Zset=h+0.35;yaw_z=pi*72/180;roll_x=pi-acos(-1/sqrt(5));R_z_2=[cos(yaw_z),-sin(yaw_z),0; sin(yaw_z),cos(yaw_z),0; 0,0,1];R_z_1=[cos(yaw_z/2),-sin(yaw_z/2),0; sin(yaw_z/2),cos(yaw_z/2),0; 0,0,1];R_x_2=[1,0,0; 0,cos(roll_x),-sin(roll_x); 0,sin(roll_x),cos(roll_x)]; [nX,nY,nZ]=rotateXYZ(Xset,Yset,Zset,R_x_2);surface(nX,nY,nZ,"EdgeAlpha",0.05,..."EdgeColor",[0 0 0],"FaceColor","interp","CData",colorMap)for k=1:4 [nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z_2); surface(nX,nY,nZ,"EdgeAlpha",0.05,... "EdgeColor",[0 0 0],"FaceColor","interp","CData",colorMap)end [nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z_1);for k=1:5 [nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z_2); surface(nX,nY,-nZ,"EdgeAlpha",0.05,... "EdgeColor",[0 0 0],"FaceColor","interp","CData",colorMap)end %-------------------------------------------------------------------------- function [nX,nY,nZ]=rotateXYZ(X,Y,Z,R) nX=zeros(size(X)); nY=zeros(size(Y)); nZ=zeros(size(Z)); for i=1:size(X,1) for j=1:size(X,2) v=[X(i,j);Y(i,j);Z(i,j)]; nv=R*v; nX(i,j)=nv(1); nY(i,j)=nv(2); nZ(i,j)=nv(3); end end end%axes属性调整%==========================================================================ax=gca;grid onax.GridLineStyle="--";ax.LineWidth=1.2;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=[-6.5914 -24.1625 -0.0384];end
另: 补两张古早之前做的折纸花球:
我好像在诡异配色的道路上越走越远了。。。其实后面第二种配色还可以不是嘛 。。。 配色1:配色2:配色3:配色4:配色4的数据上下颠倒是这样的:
这几种颜色大家可以试试看,我真的尽力了。。。。 颜色数据:
colorList1=[0.2000 0.0800 0.4300 0.2000 0.1300 0.4600 0.2000 0.2100 0.5000 0.2000 0.2800 0.5300 0.2000 0.3700 0.5800 0.1900 0.4500 0.6200 0.2000 0.4800 0.6400 0.1900 0.5400 0.6700 0.1900 0.5700 0.6900 0.1900 0.7500 0.7800 0.1900 0.8000 0.8100];colorList2=[0.1300 0.1000 0.1600 0.2000 0.0900 0.2000 0.2800 0.0800 0.2300 0.4200 0.0800 0.3000 0.5100 0.0700 0.3400 0.6600 0.1200 0.3500 0.7900 0.2200 0.4000 0.8800 0.3500 0.4700 0.9000 0.4500 0.5400 0.8900 0.7800 0.7900];colorList3=[0.3200 0.3100 0.7600 0.3800 0.3400 0.7600 0.5300 0.4200 0.7500 0.6400 0.4900 0.7300 0.7200 0.5500 0.7200 0.7900 0.6100 0.7100 0.9100 0.7100 0.6800 0.9800 0.7600 0.6700];colorList4=[0.9500 0.2300 0.6600 0.7500 0.2100 0.6000 0.6200 0.2000 0.5700 0.4500 0.1800 0.5200 0.3200 0.2100 0.5200 0.2700 0.3100 0.6000 0.2500 0.3600 0.6400 0.1900 0.4800 0.7400];
后注:两个面夹角为pi-acos(-1/sqrt(5)),同平面旋转为了五等分要转72度,因而yaw_z,和roll_x取值并不相同,代码和原文描述已经做出相应更改。
12月16日,国家能源局发布1-11月份全国电力工业统计数据。截至11月底,全国累计发电装机容量约251亿千瓦,同比增长81%。其中,风电装机容更多
2022-12-20 08:59:521-11月,全社会用电量同比增长,城乡居民生活用电量保持两位数增长;发电装机延续绿色发展趋势,发电量增速有所放缓;除太阳能发电外,其更多
2022-12-20 09:04:12记者从国家发展改革委了解到,目前,全国能源供需总体平稳有序,人民群众温暖过冬能够得到有效保障。 从煤炭生产看,1—11月份,全国原更多
2022-12-20 09:01:19近日,受寒潮天气影响,我国大部分地区出现剧烈降温,能源保供进入迎峰度冬关键期。能源大省山西深挖增产潜力,煤炭产量、电力外送规模、更多
2022-12-20 08:59:1512月18日下午,煤炭钢铁行业交流机制工作会在广东省珠海市召开,中国煤炭工业协会、中国钢铁工业协会、中国煤炭运销协会,山西焦煤、山东更多
2022-12-19 14:02:1412月17日,中国焦煤品牌集群高层领导座谈会在广东省珠海市召开。龙煤集团党委书记、董事长王佳喜,淮北矿业集团党委书记、董事长方良才,更多
2022-12-19 14:08:28盘江股份董事长朱家道12月15日在业绩交流会上表示,公司尚未释放煤炭产能约500万吨,将通过改善生产条件等方式方法,尽快释放产能,提升原更多
2022-12-19 10:08:24内蒙古自治区统计局消息,1-11月份,全区规模以上工业企业原煤产量107亿吨,同比增长121%,保持了今年以来两位数增长的态势。从当月情况看更多
2022-12-19 09:54:45今年以来,福建八方港口积极调整经营思路,多举措拓展内贸煤市场。截至11月30日,港口完成内贸卸船量3047万吨,同比上涨1112%,比去年全年更多
2022-12-19 10:12:07为了最大限度地减少疫情对经济社会发展影响,近日,吕梁市出台支持工业企业加快复工复产达产达效15条措施,促进全市经济快速回升向好。 更多
2022-12-19 10:04:25