R: Christmas tree

For the task, we need to draw a Christmas tree in R. I searched the Internet and found useful tips, but at the end of the day I don’t know how to proceed further and I hope that someone can help me.

This is my code so far.

#ctree: prints a Christmas tree on screen with size N ctree <- function(N){ for (i in 1:N){ width = sample("*",i,replace=T) cat(width,sep="-","\n") } cat(width[1],"\n") } 

This leaves me on the middle and right side of my tree (with N = 4), which is great, but not enough.

 *- *-*- *-*-*- *-*-*-*- * 

I planned to reverse what I had (basically the alignment to the right of the product of the function) to create the left side, then remove the right extreme column of the left side and stick it together with the right side of the tree, creating a Christmas tree.

I really hope someone can help me with this! Waiting for your advice.

Thanks in advance.

+5
source share
3 answers

For everyone who cares: this is what I did in R to create a Christmas tree.

 #ctree: prints a Christmas tree on screen with amount of branch levels N ctree <- function(N){ filler = "*" blank = "" for (i in 1:N){ row = c(sample(blank,Ni,replace=T),sample(filler,i,replace=T),sample(blank,Ni,replace=T)) cat(row,"\n") } cat(c(sample(blank,(N-1),replace=T),sample(filler,1,replace=T),sample(blank,(N-1),replace=T)),"\n") } #ctree 

This is the result! My own happy little one (or the big one that floats your boat).

enter image description here

+3
source

This code came from someone else. I wish I could carry them, but I lost the source. The tree he produces is beautiful, and perhaps you can change it for your own purposes.

 part <- list(x0=0,y0=0,x1=0,y1=1, branch1=NULL,branch2=NULL,extend=NULL, lwd=1,depth=0,col='springgreen') par(mfrow=c(1,1),mar=c(5, 4, 4, 2) + 0.1) segplot <- function(tree) { if (is.null(tree)) return() segments(tree$x0,tree$y0,tree$x1,tree$y1, col=tree$col, lwd=tree$lwd) segplot(tree$branch1) segplot(tree$branch2) segplot(tree$extend) } #segplot(part) grow <- function(tree) { if (is.null(tree) ) return(NULL) tree$lwd=tree$lwd*1.2 if (tree$lwd>2.5) tree$col <- 'brown' if (is.null(tree$extend)) { tree$extend <- list( x0=tree$x1, y0=tree$y1, x1=rnorm(1,1,.03)*(2*tree$x1-tree$x0), y1=(rnorm(1,.98,.02)+.02*(tree$x1==tree$x0))*(2*tree$y1-tree$y0), branch1=NULL, branch2=NULL, extend=NULL, lwd=1, depth=tree$depth, col=tree$col ) length=sqrt((tree$x1-tree$x0)^2 + (tree$y1-tree$y0)^2) angle <- asin((tree$x1-tree$x0)/length) branch <- list( x0=(tree$x1+tree$x0)/2, y0=(tree$y1+tree$y0)/2, branch1=NULL, branch2=NULL, extend=NULL, lwd=1, depth=tree$depth, col=tree$col ) shift <- rnorm(2,.5,.1) branch$x0 <- shift[1]*tree$x1+(1-shift[1])*tree$x0 branch$y0 <- shift[1]*tree$y1+(1-shift[1])*tree$y0 length=length*rnorm(1,.5,.05) co <- runif(1,.35,.45) branch$x1 <- branch$x0+sin(angle+co)*length branch$y1 <- branch$y0+cos(angle+co)*length tree$branch1 <- branch branch$x0 <- shift[2]*tree$x1+(1-shift[2])*tree$x0 branch$y0 <- shift[2]*tree$y1+(1-shift[2])*tree$y0 co <- runif(1,.35,.45) branch$x1 <- branch$x0+sin(angle-co)*length branch$y1 <- branch$y0+cos(angle-co)*length tree$branch2 <- branch } else { tree$branch1 <- grow(tree$branch1) tree$branch2 <- grow(tree$branch2) tree$extend <- grow(tree$extend) } tree$depth <- tree$depth+1 if (tree$depth>2) tree$col <- 'green' if (tree$depth>4) tree$col <- 'darkgreen' if (tree$depth>6) tree$col <- 'brown' tree } tree <- part for (i in 1:9) tree <- grow(tree) par(mar=c(0,0,0,0)) plot(x=c(-3,3),y=c(0,9),type='n',axes=FALSE,xlab='',ylab='') segplot(tree) 
+1
source

Here is a shorter version:

 ctree <- function(N=10){ for (i in 1:N) cat(rep("",N-i+1),rep("*",i),"\n") cat(rep("",N),"*\n") } ctree() 
0
source

Source: https://habr.com/ru/post/1202780/


All Articles