rm(list = ls(all.names = TRUE)) library(plot3D) library(tidyverse) # set seed for repeating random values set.seed(18) # basic helix t <- seq(1, 50, by = 0.01) x <- 1000 * cos(2 * t) / (20 * t + t^2 / 2 + t^3 /100) y <- 1000 * sin(2 * t) / (20 * t + t^2 / 2 + t^3 /100) z <- t/5 dd <- data.frame(x, y, z) # draw jpeg("christmas_tree.jpg", width = 2400, height = 2400, res = 300) # green part dd1 <- dd %>% subset(z > 1.45) %>% subset(z < 8.4) scatter3D(dd1$x, dd1$y, dd1$z, phi = 10, theta = 1, bty = "g", pch = 20, cex = 2, zlim = c(0, 10), xlim = c(-5, 5), ylim = c(-5, 5), col = "green") # stem dd2 <- dd %>% subset(z > 2.7) %>% subset(z < 5.1) scatter3D(dd2$x, dd2$y, dd2$z - 2.8, phi = 10, theta = 1, bty = "g", pch = 20, cex = 2, add = T, col = "brown") # star scatter3D(0, 0, 8.8, phi = 10, theta = 1, bty = "g", pch = 8, cex = 4, add = T, col = "gold", lwd = 6) # red balls ss <- sample(x = 1:dim(dd1)[1], size = 25, prob = 1 / dim(dd1)[1] + c(rep(1 / (2 * dim(dd1)[1]), dim(dd1)[1]/2), rep(- 1 / (2 * dim(dd1)[1]), dim(dd1)[1]/2))) dd3 <- dd1[ss, ] scatter3D(dd3$x * 1.1, dd3$y * 1.1, dd3$z, phi = 10, theta = 1, bty = "g", pch = 20, cex = 3.5, add = T, col = "red") dev.off()