#=======================================================# # Copyright (c) 2018. Yu-Cheng Ku. All Rights Reserved. # # Tinkling Heavy Rain # # Written by Yu-Cheng Ku # #=======================================================# win.graph(width = 6.3, height = 5.8) par(mar = c(1.3,1.3,1.3,1.3), bg = "seashell2") plot(c(0,0), xlim = c(-1.5,3.5), ylim = c(-4.5,0.5), type="n", axes=F, xlab="", ylab="") ## Lake n_scale = 10 n.wave = 2000 for(i in 1:n_scale) { range_u = -5.5 + i * (-1.8-(-5.5))/n_scale range_l = -5.5 + (i-1) * (-1.8-(-5.5))/n_scale rx = runif(n.wave, -2, 4) ry = runif(n.wave, range_l, range_u) comb = cbind(rx, ry) points(comb, col = rgb(53+15*i, 180-2*i, 235, max = 255), pch = "~", cex = 1.7) } # sky n_scale = 10 for(i in 1:n_scale) { range_u = -0.6 + i * (0.4-(-0.8))/n_scale lines(rbind(c(-5,range_u),c(5,range_u)), col = rgb(249-6*i, 230, 252, max = 255), lwd = 30) } ## Lake # Moon points(1.95, 0.2, pch = 16, col = "khaki1", cex = 5) points(2, 0.25, pch = 16, col = rgb(249-6*7, 230, 252, max = 255), cex = 3.6) # Cloud points(3, -0.7, pch = 16, col = "white", cex = 17) points(2.3, -0.7, pch = 16, col = "white", cex = 10) points(2.9, -0.7, pch = 16, col = "grey95", cex = 12) points(2.4, -0.7, pch = 16, col = "grey97", cex = 7) points(-1.2, -1, pch = 16, col = "white", cex = 30) points(-0.5, -0.8, pch = 16, col = "white", cex = 20) points(-1.1, -1, pch = 16, col = "grey95", cex = 25) points(-0.6, -0.8, pch = 16, col = "grey97", cex = 15) # cloud reflection points(3, -1.7, pch = 16, col = "white", cex = 17) points(2.3, -1.7, pch = 16, col = "white", cex = 10) points(2.9, -1.7, pch = 16, col = "grey95", cex = 12) points(2.4, -1.7, pch = 16, col = "grey97", cex = 7) points(-1.2, -1.45, pch = 16, col = "white", cex = 30) points(-0.5, -1.55, pch = 16, col = "white", cex = 20) points(-1.1, -1.45, pch = 16, col = "grey95", cex = 25) points(-0.6, -1.55, pch = 16, col = "grey97", cex = 15) points(-1.2, -1, pch = 16, col = "white", cex = 30) points(-0.5, -0.8, pch = 16, col = "white", cex = 20) points(-1.1, -1, pch = 16, col = "grey95", cex = 25) points(-0.6, -0.8, pch = 16, col = "grey97", cex = 15) # Moon reflection points(1.95, -2.6, pch = 16, col = "khaki1", cex = 5) points(2, -2.65, pch = 16, col = rgb(53+15*7, 180-2*7, 235, max = 255), cex = 3.6) ## Waves wave = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -5, -0.8) out = cbind(w.x, w.y) return(out) } wave2 = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -2.04, -1.2) out = cbind(w.x, w.y) return(out) } wave3 = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -1.9, -1.7) out = cbind(w.x, w.y) return(out) } wave4_1 = function(n) { w.x = runif(n, -2, -0.2) w.y = runif(n, -2.5, -2) out = cbind(w.x, w.y) return(out) } wave4_2 = function(n) { w.x = runif(n, 2.5, 3.5) w.y = runif(n, -2.3, -2) out = cbind(w.x, w.y) return(out) } wave5 = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -1.44, -1.35) out = cbind(w.x, w.y) return(out) } wave6 = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -1.33, -1.29) out = cbind(w.x, w.y) return(out) } wave7 = function(n) { w.x = runif(n, 1.8, 2.05) w.y = runif(n, -2.8, -2.35) out = cbind(w.x, w.y) return(out) } wave8 = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -4.5, -2.5) out = cbind(w.x, w.y) return(out) } wave9 = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -2, -1.5) out = cbind(w.x, w.y) return(out) } wave10 = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -1.5, -1.25) out = cbind(w.x, w.y) return(out) } fog2 = function(n) { w.x = runif(n, -2, 4.5) w.y = runif(n, -1.8, -0.65) out = cbind(w.x, w.y) return(out) } # To cover the cloud n.wave.2 = 300 for(i in 6:n_scale) { range_u = -5.5 + i * (-1-(-5.5))/n_scale range_l = -5.5 + (i-1) * (-1-(-5.5))/n_scale rx = runif(n.wave.2, -2, 4) ry = runif(n.wave.2, range_l, range_u) comb = cbind(rx, ry) points(comb, col = rgb(53+15*i, 180-2*i, 235, max = 255), pch = "~", cex = 1.7) } points(wave4_1(80), pch = "~", col = "ivory2", cex = 1.7) points(wave4_2(40), pch = "~", col = "ivory2", cex = 1.7) points(wave(300), pch = "~", col = "lightgoldenrodyellow", cex = 1.5) points(wave2(150), pch = "~", col = "#44571E", cex = 2.3) points(wave2(150), pch = "~", col = "#4F620F", cex = 2.3) points(wave3(100), pch = "~", col = "#4F620F", cex = 2) points(wave7(25), pch = "~", col = "khaki1", cex = 1.5) # Land and reflection sk.x = seq(-3, 5, by = 0.25) sk.y = function(x) rep(-1.5, length(x)) land.x = seq(-10, 15, by = 0.5) land.u = function(x) -0.05 * x land.l = function(x) 0.05 * x jit = runif(length(sk.x),-0.05, 0.05) # land lines(cbind(sk.x+1, land.u(sk.x))-0.7 + jit, col = "#4F620F", lwd = 40) lines(cbind(sk.x, sk.y(sk.x))+0.5, col = "#4F620F", lwd = 40) # reflection lines(cbind(sk.x+2, land.l(sk.x))- 1.7 - jit, col = "#44571E", lwd = 40) lines(cbind(sk.x, sk.y(sk.x)+0.06), col = "#44571E", lwd = 40) points(wave9(250), pch = "~", col = "darkolivegreen", cex = 1.5) #points(wave10(250), pch = "~", col = "gray35", cex = 1.5) # joint points(wave6(250), pch = "-", col = "grey40", cex = 1.5) # lower twilights points(wave5(100), pch = "-", col = "grey50", cex = 1.2) #lines(cbind(sk.x, sk.y(sk.x)+0.27 + jit/2), col = "grey45", lwd = 6) #lines(cbind(sk.x, sk.y(sk.x)+0.25 + jit/2), col = "grey25", lwd = 4) #points(fog2(6000), pch = ".", col = rgb(250, 253, 243, alpha = 10, max = 255), cex = 2) lines(rbind(c(-5,-1.12),c(5,-1.12)), col = rgb(250,253,243, alpha = 20, max = 255), lwd = 40) lines(rbind(c(-5,-1.27),c(5,-1.27)), col = rgb(250,253,243, alpha = 25, max = 255), lwd = 45) lines(rbind(c(-5,-1.33),c(5,-1.33)), col = rgb(250,253,243, alpha = 25, max = 255), lwd = 20) ## Willow xL = seq(-0.6, 0.3, l=100) x1 = seq(-.6, 1.5, l=1000) x2 = seq(-.85, 1.3, l=1000) x3 = seq(-0.65, -0.05, l = 1000) x4 = seq(-1.35, -0.65, l = 1000) x5 = seq(-0.65, 0.28, l = 1000) x6 = seq(-0.5, 0.8, l = 1000) x7 = seq(-0.65, 1, l = 1000) x8 = seq(-1.15, -0.62, l = 1000) x9 = seq(-0.85, -0.5, l = 1000) x10 = seq(-0.8, 0.05, l = 1000) x11 = seq(-0.8, 0.5, l = 1000) x12 = seq(-0.64, -0.4, l = 1000) yL = function(t){-(1.3)*t^2} y1 = function(t){-t^2} y2 = function(t){-1.1*(t+0.2)^2 - 0.2} y3 = function(t){-(12)*(t+.55)^2 - 0.25} y4 = function(t){-(12)*(t+.85)^2 + 0.1} y5 = function(t){-(6)*(t+.45)^2 - 0.1} y6 = function(t){-(2)*(t+.5)^2 - 0.23} y7 = function(t){-(1.5)*(t+.4)^2 - 0.21} y8 = function(t){-(20)*(t+.75)^2 + 0.03} y9 = function(t){-(50)*(t+.58)^2 - 0.01} y10 = function(t){-(15)*(t+.45)^2 + 0.1} y11 = function(t){-5*(t+.35)^2 + 0.1} y12 = function(t){-100*(t+.45)^2 + 0.12} yU.1 = c(-1.8, -2) yU.2 = c(-0.55, -0.55) #lines(x2, y2(x2), col = "#523305" ) lines(x3, y3(x3), col = "#722809") lines(x4, y4(x4), col = "#722809") lines(x5, y5(x5), col = "#523305", lwd=2.5) lines(x6, y6(x6), lwd=1.5, col = "saddlebrown") lines(x7, y7(x7), lwd=2, col = "saddlebrown") lines(x8, y8(x8), lwd=2, col = "saddlebrown") lines(x9, y9(x9), lwd=2, col = "#722809") lines(x10, y10(x10), lwd=2, col="saddlebrown") lines(x11, y11(x11), lwd=2, col="saddlebrown") lines(x12, y12(x12), lwd=2, col="saddlebrown") yL2 = function(x) 3 * x + 1.85 yL3 = function(x) 2.9 * x + 1.85 xL2 = seq(-1.15, -1.03, l = 50) lines(cbind(xL2 - 0.05, yL2(xL2)), lwd =2, col="#722809") lines(cbind(xL2 - 0.07, yL3(xL2) - 0.05), lwd =2, col="#722809") lines(cbind(xL2 - 0.05, yL3(xL2) - 0.05), lwd =3, col="#523305") lines(cbind(xL2 - 0.045, yL2(xL2)), lwd =2, col="grey25") lines(cbind(c(-1.1, -.64), c(-1.28, -.34)), lwd =2, col="#722809") lines(cbind(c(-1.1, -.64), c(-1.2, -.31)), lwd =2, col="#722809") lines(cbind(c(-1.075, -.65), c(-1.2, -.33)), lwd =3, col="#523305") # Left main tree trunk lines(xL-1.5, y1(xL)-1.5, lwd=2, col = "#523305") lines(xL-1.51, yL(xL)-1.41, lwd=2, col = "#523305") lines(xL-1.51, yL(xL)-1.45, lwd=10, col = "#722809") # Tree shadow x.shadow = seq(-0.6, 0.3, l=140) points(x.shadow-1.5, y1(x.shadow)-1.5 + abs(rnorm(length(x.shadow),0,.03)), pch=".", col = "grey15", cex = 1.4) # Leaves # 9 N.leaves = 50 L.grade = 10 l9 = seq(-0.85, -0.6, l = N.leaves) L9 = cbind(l9, y9(l9)) for(i in 1:L.grade) { comb.l = L9[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.06/L.grade) * (L.grade-i+1) comb.r = L9[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * (L.grade-i+1) points(comb.l, pch = ",", col = rgb(11-i*1, 115 + i*10, 32, max = 255), cex = 4 - 0.15 * i) points(comb.r, pch = "`", col = rgb(11-i*1, 115 + i*10, 32, max = 255), cex = 4.2 - 0.15 * i) } # 8 l8 = seq(-1.15, -0.75, l = N.leaves) L8 = cbind(l8, y8(l8)) for(i in 1:L.grade) { comb.l = L8[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.05/L.grade) * (L.grade-i+1) comb.r = L8[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * (L.grade-i+1) points(comb.l, pch = ",", col = rgb(11-i*1, 115 + i*10, 32, max = 255), cex = 4 - 0.15 * i) points(comb.r, pch = "`", col = rgb(11-i*1, 115 + i*10, 32, max = 255), cex = 4.2 - 0.15 * i) } # 4 l4 = seq(-1.35, -0.8, l = N.leaves) L4 = cbind(l4, y4(l4)) for(i in 1:L.grade) { comb.l = L4[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.04/L.grade) * (L.grade-i+1) comb.r = L4[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * (L.grade-i+1) points(comb.l, pch = ",", col = rgb(11-i*1, 115 + i*10, 32, max = 255), cex = 4 - 0.15 * i) points(comb.r, pch = "`", col = rgb(11-i*1, 115 + i*10, 32, max = 255), cex = 4.2 - 0.15 * i) } # 7 l7 = seq(-0.5, 1, l = N.leaves) L7 = cbind(l7, y7(l7)) for(i in 1:L.grade) { comb.l = L7[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.05/L.grade) * i comb.r = L7[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * i points(comb.l, pch = ",", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4 - 0.15 * (L.grade-i+1)) points(comb.r, pch = "`", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4.2 - 0.15 * (L.grade-i+1)) } # 6 l6 = seq(-0.3, 0.8, l = N.leaves) L6 = cbind(l6, y6(l6)) for(i in 1:L.grade) { comb.l = L6[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.05/L.grade) * i comb.r = L6[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * i points(comb.l, pch = ",", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4 - 0.15 * (L.grade-i+1)) points(comb.r, pch = "`", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4.2 - 0.15 * (L.grade-i+1)) } # 5 l5 = seq(-0.4, 0.28, l = N.leaves) L5 = cbind(l5, y5(l5)) for(i in 1:L.grade) { comb.l = L5[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.05/L.grade) * i comb.r = L5[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * i points(comb.l, pch = ",", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4 - 0.15 * (L.grade-i+1)) points(comb.r, pch = "`", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4.2 - 0.15 * (L.grade-i+1)) } # 3 l3 = seq(-0.45, -0.05, l = N.leaves) L3 = cbind(l3, y3(l3)) for(i in 1:L.grade) { comb.l = L3[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.05/L.grade) * i comb.r = L3[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * i points(comb.l, pch = ",", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4 - 0.15 * (L.grade-i+1)) points(comb.r, pch = "`", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4.2 - 0.15 * (L.grade-i+1)) } # 12 l12 = seq(-0.48, -0.64, l = N.leaves) L12 = cbind(l12, y12(l12)) for(i in 1:L.grade) { comb.l = L12[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.05/L.grade) * i comb.r = L12[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * i points(comb.l, pch = ",", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4 - 0.15 * (L.grade-i+1)) points(comb.r, pch = "`", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4.2 - 0.15 * (L.grade-i+1)) } # 11 l11 = seq(-0.3, 0.5, l = N.leaves) L11 = cbind(l11, y11(l11)) for(i in 1:L.grade) { comb.l = L11[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.05/L.grade) * i comb.r = L11[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * i points(comb.l, pch = ",", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4 - 0.15 * (L.grade-i+1)) points(comb.r, pch = "`", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4.2 - 0.15 * (L.grade-i+1)) } # 10 l10 = seq(-0.38, 0.05, l = N.leaves) L10 = cbind(l10, y10(l10)) for(i in 1:L.grade) { comb.l = L10[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.l[,1] = comb.l[,1] - (0.05/L.grade) * i comb.r = L10[((i-1)*(N.leaves/L.grade)+1):((i-1)*(N.leaves/L.grade)+(N.leaves/L.grade)), ] comb.r[,1] = comb.r[,1] + (0.08/L.grade) * i points(comb.l, pch = ",", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4 - 0.15 * (L.grade-i+1)) points(comb.r, pch = "`", col = rgb(11-(L.grade-i+1)*1, 115 + (L.grade-i+1)*10, 32, max = 255), cex = 4.2 - 0.15 * (L.grade-i+1)) } # Copyright text(x=2.9, y=-4.3, label="by Yu-Cheng Ku", col = "navyblue", cex = 1.1)