# Author: Harm Derksen. boomfactor:=1.30; taklengte:=4.5; nn:=9; boom:=proc(start,n) local b,d,i,j,a,v,w,l,u,c,e,f,g,h,l2,s,t,kleur; if n=0 then RETURN([]) fi; a:=start[1];b:=start[2];d:=start[3]; v:=seq(b[i]-a[i],i=1..3); w:=seq(d[i]-a[i],i=1..3); l:=sqrt(sum(v[j]^2,j=1..3)); u:=[(v[2]*w[3]-v[3]*w[2])/l,(v[3]*w[1]-v[1]*w[3])/l,(v[1]*w[2]-v[2]*w[1])/l]; c:=[seq(b[i]+w[i],i=1..3)]; e:=[seq(a[i]+taklengte*u[i],i=1..3)]; f:=[seq(b[i]+taklengte*u[i],i=1..3)]; g:=[seq(c[i]+taklengte*u[i],i=1..3)]; h:=[seq(d[i]+taklengte*u[i],i=1..3)]; l2:=sqrt(1/boomfactor^2-boomfactor^2/4); s:=[seq(e[i]+v[i]/2+u[i]*l2,i=1..3)]; t:=[seq(h[i]+v[i]/2+u[i]*l2,i=1..3)]; kleur:=COLOR(RGB,n/nn,1-n/nn,0); [polygonplot3d([a,b,f,s,e],color=kleur), polygonplot3d([d,c,g,t,h],color=kleur), polygonplot3d([b,c,g,f],color=kleur), polygonplot3d([a,d,h,e],color=kleur), op(boom([f,g,s],n-1)),op(boom([s,t,e],n-1))]; end: with(plots): fr:=boom([[0,0,0],[boomfactor,0,0],[0,1,0]],nn): display3d(fr,scaling=CONSTRAINED);