[This article was first published on Ripples, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Tell me, which side of the earth does this nose come from? Ha! (ALF)
Reading about strange attractors I came across with this book, where I discovered a way to generate two dimensional chaotic maps. The generic equation is pretty simple:
I used it to generate these chaotic galaxies:
Changing the vector of parameters you can obtain other galaxies. Do you want to try?
library(ggplot2) library(dplyr) #Generic function attractor = function(x, y, z) { c(z[1]+z[2]*x+z[3]*x^2+ z[4]*x*y+ z[5]*y+ z[6]*y^2, z[7]+z[8]*x+z[9]*x^2+z[10]*x*y+z[11]*y+z[12]*y^2) } #Function to iterate the generic function over the initial point c(0,0) galaxy= function(iter, z) { df=data.frame(x=0,y=0) for (i in 2:iter) df[i,]=attractor(df[i-1, 1], df[i-1, 2], z) df %>% rbind(data.frame(x=runif(iter/10, min(df$x), max(df$x)), y=runif(iter/10, min(df$y), max(df$y))))-> df return(df) } opt=theme(legend.position="none", panel.background = element_rect(fill="#00000c"), plot.background = element_rect(fill="#00000c"), panel.grid=element_blank(), axis.ticks=element_blank(), axis.title=element_blank(), axis.text=element_blank(), plot.margin=unit(c(-0.1,-0.1,-0.1,-0.1), "cm")) #First galaxy z1=c(1.0, -0.1, -0.2, 1.0, 0.3, 0.6, 0.0, 0.2, -0.6, -0.4, -0.6, 0.6) galaxy1=galaxy(iter=2400, z=z1) %>% ggplot(aes(x,y))+ geom_point(shape= 8, size=jitter(12, factor=4), color="#ffff99", alpha=jitter(.05, factor=2))+ geom_point(shape=16, size= jitter(4, factor=2), color="#ffff99", alpha=jitter(.05, factor=2))+ geom_point(shape=46, size= 0, color="#ffff00")+opt #Second galaxy z2=c(-1.1, -1.0, 0.4, -1.2, -0.7, 0.0, -0.7, 0.9, 0.3, 1.1, -0.2, 0.4) galaxy2=galaxy(iter=2400, z=z2) %>% ggplot(aes(x,y))+ geom_point(shape= 8, size=jitter(12, factor=4), color="#ffff99", alpha=jitter(.05, factor=2))+ geom_point(shape=16, size= jitter(4, factor=2), color="#ffff99", alpha=jitter(.05, factor=2))+ geom_point(shape=46, size= 0, color="#ffff00")+opt #Third galaxy z3=c(-0.3, 0.7, 0.7, 0.6, 0.0, -1.1, 0.2, -0.6, -0.1, -0.1, 0.4, -0.7) galaxy3=galaxy(iter=2400, z=z3) %>% ggplot(aes(x,y))+ geom_point(shape= 8, size=jitter(12, factor=4), color="#ffff99", alpha=jitter(.05, factor=2))+ geom_point(shape=16, size= jitter(4, factor=2), color="#ffff99", alpha=jitter(.05, factor=2))+ geom_point(shape=46, size= 0, color="#ffff00")+opt #Fourth galaxy z4=c(-1.2, -0.6, -0.5, 0.1, -0.7, 0.2, -0.9, 0.9, 0.1, -0.3, -0.9, 0.3) galaxy4=galaxy(iter=2400, z=z4) %>% ggplot(aes(x,y))+ geom_point(shape= 8, size=jitter(12, factor=4), color="#ffff99", alpha=jitter(.05, factor=2))+ geom_point(shape=16, size= jitter(4, factor=2), color="#ffff99", alpha=jitter(.05, factor=2))+ geom_point(shape=46, size= 0, color="#ffff00")+opt
To leave a comment for the author, please follow the link and comment on their blog: Ripples.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.