用python画圣诞树代码_如何用数学软件画一个“圣诞树”?

本文介绍了如何使用Python和Mathematica来创建3D圣诞树的代码示例,展示了不同编程环境下的实现方式,包括代码解释和图形渲染效果。Mathematica版本中,通过调整参数绘制出逼真的圣诞树形状,并添加了礼物和雪花元素,为节日增添欢乐气氛。
摘要由CSDN通过智能技术生成

PD = .5;

s[t_, f_] := t^.6 - f

dt[cl_, ps_, sg_, hf_, dp_, f_, flag_] :=

Module[{sv, basePt},

{PointSize[ps],

sv = s[t, f];

Hue[cl (1 + Sin[.02 t])/2, 1, .3 + sg .3 Sin[hf sv]],

basePt = {-sg s[t, f] Sin[sv], -sg s[t, f] Cos[sv], dp + sv};

Point[basePt],

If[flag,

{Hue[cl (1 + Sin[.1 t])/2, 1, .6 + sg .4 Sin[hf sv]], PointSize[RandomReal[.01]],

Point[basePt + 1/2 RotationTransform[20 sv, {-Cos[sv], Sin[sv], 0}][{Sin[sv], Cos[sv], 0}]]},

{}]

}]

frames = ParallelTable[

Graphics3D[Table[{

dt[1, .01, -1, 1, 0, f, True], dt[.45, .01, 1, 1, 0, f, True],

dt[1, .005, -1, 4, .2, f, False], dt[.45, .005, 1, 4, .2, f, False]},

{t, 0, 200, PD}],

ViewPoint -> Left, BoxRatios -> {1, 1, 1.3},

ViewVertical -> {0, 0, -1},

ViewCenter -> {{0.5, 0.5, 0.5}, {0.5, 0.55}}, Boxed -> False,

PlotRange -> {{-20, 20}, {-20, 20}, {0, 20}}, Background -> Black],

{f, 0, 1, .01}];

Export["tree.gif", frames]

Mathematica版本:

打开一个notebook,然后长按CTRL+/,效果如下:

像不像一棵圣诞树呢?

这里有用SAS画的圣诞树,翻译成了Mathematica版的

Clear["`*"];

ifs[prob_,A_,init_,max_]:=FoldList[#2.{#[[1]],#[[2]],1}&,init,RandomChoice[prob->A,max]];

L={{{0.03,0},{0,0.1}},{{0.85,0},{0,0.85}},{{0.8,0},{0,0.8}},{{0.2,-0.08},{0.15,0.22}},{{-0.2,0.08},{0.15,0.22}},{{0.25,-0.1},{0.12,0.25}},{{-0.2,0.1},{0.12,0.2}}};

B=Map[List,{{0,0},{0,1.5},{0,1.5},{0,0.85},{0,0.85},{0,0.3},{0,0.4}},{2}];

{A,prob,init,max}={N@Join[L,B,3],{2,60,10,7,7,7,7}/100.,{0.,2.},10^5};

pts=ifs[prob,A,init,max];//AbsoluteTiming

Graphics[{{Darker@Green,PointSize@Tiny,Point@pts},{Hue@Random[],PointSize@Large,Point@#}&/@RandomChoice[pts,200]},AspectRatio->1.5]

去年用R画了圣诞树送给教定量入门的教授,改了一下Wiekvoet: Merry Christmas的代码。

( 今年直接手动涂色送happy spring的卡片了,不是程序媛搞不出酷炫的东西好桑心)

Wolfram Mathematica 算数学软件吧?

还有这个:

算不算抖机灵 = =

鸡汁的我

MATLAB ,名副其实的数学软件。

参考 File Exchange

by Anselm Ivanovas

====================================

%

function christmas

% Anselm Ivanovas, anselm.ivanovas@student.unisg.ch

%Basically just a nice plot for some christmas fun.

%3D Plot of a hhristmas tree with some presents and snow

%% setup

snow=800; % number of snow flakes [0 .. 5000]

%% draw tree

h=0:0.2:25; %vertical grid

[X,Y,Z] = cylinder(tree(h)); %produce a tree formed cylinder

Z=Z*25; %scale to the right heigth

%add some diffusion to the surface of the tree to make it look more real

treeDiffusion=rand(126,21)-0.5;%some horizontal diffusion data

%add diffusion to the grid points

for cnt1=1:21

for cnt2=16:126%starting above the trunk

%get the angle to always diffuse in direction of the radius

angle=atan(Y(cnt2,cnt1)/X(cnt2,cnt1));

%split the diffusion in the two coordinates, depending on the angle

X(cnt2,cnt1)=X(cnt2,cnt1)+cos(angle)*treeDiffusion(cnt2,cnt1);

Y(cnt2,cnt1)=Y(cnt2,cnt1)+sin(angle)*treeDiffusion(cnt2,cnt1);

%some Vertical diffusion for each point

Z(cnt2,cnt1)=Z(cnt2,cnt1)+(rand-0.5)*0.5;

end

end

%draw the tree

surfl(X,Y,Z,'light')

%% View and format

%Use as nice green color map (darker at the bottom, lighter at the top)

r=(0.0430:(0.2061/50):0.2491)';%red component

g=(0.2969:(0.4012/50):0.6981)';%green component

b=(0.0625:(0.2696/50):0.3321)';%blue component

map=[r,g,b];%join in a map

for cnt=1:6

%change the lower part to brown for the trunk

map(cnt,:)=[77,63,5]/265;

end

colormap(map)%set the map

view([-37.5,4])%Change the view to see a little more of the Actual 3D tree

lighting phong %some nice lighting

shading interp %remove grid and smoothen the surface color

axis equal %takes care of display in the right proportion

axis([-10 10 -10 10 0 30]) %give some more axis space (for the snow later)

axis off %but don't show axis

hold on %to draw the rest

title('Merry Christmas 知乎er')%self explaining

%% Presents

%Draw some presents around the tree (each with random color)

drawPresent(2,-4,0,3,3,2);

drawPresent(-4,3,0,2,3,1.5);

drawPresent(5,3,0,4,3,3);

drawPresent(-14,-5,0,6,3,1);

drawPresent(-9,-10,0,2,2,2);

drawPresent(0,4,0,4,3,3);

drawPresent(-6,-13,0,3,3,3);

%% Snow

%create some random 3D coordinates for the snow (amount as in setup above)

snowX=(rand(snow,1)*25-12.5);

snowY=(rand(snow,1)*25-12.5);

snowZ=(rand(snow,1)*27);

%Note:Some flakes will end up IN the tree but just can't be seen then

plot3(snowX,snowY,snowZ,'w*')%plot coordinates as white snow flakes

hold off%Done

end % of function

%% ============= private functions

functionr=tree(h)%Gives a profile for the tree

for cnt=1:length(h)

if(h(cnt)==0)%no Width at the bottom. Ensures a "closed" trunk

r(cnt)=0;

end

%smaller radius for the trunk

if (h(cnt)>0 && h(cnt)<=3)

r(cnt)=1.5;

end

%reduce radius gradually from 8 to 0. Note: will only work with a trunk heigth

%of 3 and a whole tree heigth of 25. Scale the height of the tree in

%the "draw tree" section, since the cylinder command will return a 1

%unit high cylinder anyway

if(h(cnt)>3)

r(cnt)=8-(h(cnt)-3)*0.3636;

end

end

end % of function

%Draws a present with the given coordinate + size in a random color

%Note:Given coordinates apply to the lower front + left corner of the

%present (the one closest to the viewer) as seen in the plot

functiondrawPresent(dx,dy,dz,scalex,scaley,scalez)

%the standard present coordinates

presentX=[0.5 0.5 0.5 0.5 0.5; 0 1 1 0 0; 0 1 1 0 0; 0 1 1 0 0; 0.5 0.5 0.5 0.5 0.5];

presentY=[0.5 0.5 0.5 0.5 0.5; 0 0 1 1 0; 0 0 1 1 0; 0 0 1 1 0; 0.5 0.5 0.5 0.5 0.5];

presentZ=[0 0 0 0 0; 0 0 0 0 0; 0.5 0.5 0.5 0.5 0.5; 1 1 1 1 1; 1 1 1 1 1];

%draw some presents with random colors

%scale present and move it to the right place and get the plot handle

myHandle=surf((presentX*scalex+dx),(presentY*scaley+dy), (presentZ*scalez+dz));

%some random color map

randColorMap(:,:,1)=repmat(rand,[5,5]);%r component

randColorMap(:,:,2)=repmat(rand,[5,5]);%g component

randColorMap(:,:,3)=repmat(rand,[5,5]);%b component

%Assign colormap just to the plot handle object of the present, so the tree

%does not change color

set(myHandle,'CData',randColorMap)

shading interp %Nice shding + without grid

end % of function

Christmas Tree

R语言

能画,但是这种比较有什么意义呢..................................

L

c(0.03, 0, 0 , 0.1,

0.85, 0.00, 0.00, 0.85,

0.8, 0.00, 0.00, 0.8,

0.2, -0.08, 0.15, 0.22,

-0.2, 0.08, 0.15, 0.22,

0.25, -0.1, 0.12, 0.25,

-0.2, 0.1, 0.12, 0.2),

nrow=4)

# ... and each row is a translation vector

B

c(0, 0,

0, 1.5,

0, 1.5,

0, 0.85,

0, 0.85,

0, 0.3,

0, 0.4),

nrow=2)

prob = c(0.02, 0.6,.08, 0.07, 0.07, 0.07, 0.07)

# Iterate the discrete stochastic map

N = 1e5 #5 # number of iterations

x = matrix(NA,nrow=2,ncol=N)

x[,1] = c(0,2) # initial point

k

for (i in 2:N)

x[,i] = crossprod(matrix(L[,k[i]],nrow=2),x[,i-1]) + B[,k[i]] # iterate

# Plot the iteration history

png('card.png')

par(bg='darkblue',mar=rep(0,4))

plot(x=x[1,],y=x[2,],

col=grep('green',colors(),value=TRUE),

axes=FALSE,

cex=.1,

xlab='',

ylab='' )#,pch='.')

bals

points(x=x[1,bals],y=x[2,bals]-.1,

col=c('red','blue','yellow','orange'),

cex=2,

pch=19

)

text(x=-.7,y=8,

labels='Merry',

adj=c(.5,.5),

srt=45,

vfont=c('script','plain'),

cex=3,

col='gold'

)

text(x=0.7,y=8,

labels='Christmas',

adj=c(.5,.5),

srt=-45,

vfont=c('script','plain'),

cex=3,

col='gold'

)

dev.off()

相关标签:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

网友评论

文明上网理性发言,请遵守 新闻评论服务协议我要评论

立即提交

专题推荐独孤九贱-php全栈开发教程

全栈 100W+

主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门

玉女心经-web前端开发教程

入门 50W+

主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门

天龙八部-实战开发教程

实战 80W+

主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值