程序员的浪漫—利用Matlab 实现圣诞树动态显示

一、前言

        圣诞节是基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节,天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期,《圣经》并无记载。公元336年罗马教会开始在12月25日过此节。12月25日原是罗马帝国规定的太阳神诞辰。有人认为选择这天庆祝圣诞,是因为基督教徒认为耶稣就是正义、永恒的太阳。5世纪中叶以后,圣诞节作为重要节日,成了教会的传统,并在东西派教会中逐渐传开。因所用历法不同等原因,各教派会举行庆祝的具体日期和活动形式也有差别。圣诞节习俗传播到亚洲主要是在十九世纪中叶,日本、韩国等都受到了圣诞文化的影响。现在西方在圣诞节常互赠礼物,举行欢宴,并以圣诞老人、圣诞树等增添节日气氛,已成为普遍习俗。圣诞节也成为西方世界以及其他很多地区的公共假日。   

二、效果展示

 

 

三、实现步骤

1.随机产生51个坐标,在每一个坐标上绘制“*”号,产生 450 个雪花

2.我们可知。树是一个圆锥,我们利用cylinder函数产生一个圆锥,并且在surf在三维坐标面显示出来,也就是我们利用数学图形来展示实物效果,给人一个好的视觉效果。

四、编码实现

1.绘制漫天雪花

snow_count=450;
snowX=(rand(snow_count-200,1)*25-12.5)/30;
snowY=(rand(snow_count-200,1)*25-12.5)/30;
snowZ=(rand(snow_count-200,1)*27)/30;
color0 = jet(length(snowX));
for ii = 1:length(snowX)
    plot3(snowX(ii),snowY(ii),snowZ(ii),'*','color',color0(ii, :),'markersize',randi(15))
end
hight=plot3(snowX,snowY,snowZ,'w*');

2.绘制树和装饰零件

N = 6^5;
c = 50;
k = randi(6,c,1);
l = randperm(N,c);
q = @(x) rand(N,1);
a = q()*2*pi; 
z = q(); r = .4*(1-z); 
t = q();
x = r.*cos(a); 
y = r.*sin(a); 
P = {'ro','ys','md','b^','kh','c*'};
scatter3(x.*t,y.*t,z,[],[zeros(N,1) (t.*r).^.6 zeros(N,1)],'*')
plot3(0,0,1.05,'rp','markers',12,'markerf','r')
for i = 1:6 
    L = l(k==i); 
    plot3(x(L),y(L),z(L),P{i},'markers',8,'linew',2);
end
[X,Y,Z] = cylinder(.025,30);
surf(X,Y,-Z*.1)
view(3, 9)
axis equal off

整体代码如下

clc
clear all
close all

figure('color','k'),
hold on

snow_count=450;
snowX=(rand(snow_count-200,1)*25-12.5)/30;
snowY=(rand(snow_count-200,1)*25-12.5)/30;
snowZ=(rand(snow_count-200,1)*27)/30;
color0 = jet(length(snowX));
for ii = 1:length(snowX)
    plot3(snowX(ii),snowY(ii),snowZ(ii),'*','color',color0(ii, :),'markersize',randi(15))
end
hight=plot3(snowX,snowY,snowZ,'w*');
N = 6^5;
c = 50;
k = randi(6,c,1);
l = randperm(N,c);
q = @(x) rand(N,1);
a = q()*2*pi; 
z = q(); r = .4*(1-z); 
t = q();
x = r.*cos(a); 
y = r.*sin(a); 
P = {'ro','ys','md','b^','kh','c*'};
scatter3(x.*t,y.*t,z,[],[zeros(N,1) (t.*r).^.6 zeros(N,1)],'*')
plot3(0,0,1.05,'rp','markers',12,'markerf','r')
for i = 1:6 
    L = l(k==i); 
    plot3(x(L),y(L),z(L),P{i},'markers',8,'linew',2);
end
[X,Y,Z] = cylinder(.025,30);
surf(X,Y,-Z*.1)
view(3, 9)
axis equal off
for i = 1:3:c*9 
    set(gca,'vie',[i, 9]); 
    drawnow
end

  • 23
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无限嚣张(菜菜)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值