inst/doc/opensimplex-on-fire.R

## ----include = FALSE----------------------------------------------------------
do_render <- Sys.getenv("RENDER_OPENSIMPLEX2_VIGNETTE") == "TRUE"
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  out.width = "400px"
)
knitr::opts_knit$set(upload.fun = identity)
knitr::knit_hooks$set(
  fullbleed = function(before, options, envir) {
  if (before) {
    par(mar = c(0,0,0,0), oma = c(0,0,0,0))
  }
},
document = function(x) {
    fig_dir <- knitr::opts_chunk$get("fig.path")
    all_gifs <- list.files(fig_dir, pattern = "\\.gif$", full.names = TRUE)
    file.copy(all_gifs, "../pkgdown/vignette/", overwrite = TRUE)
    return(x)
})

library(ragg)
library(gifski)

## ----setup-space--------------------------------------------------------------
library(opensimplex2)
w <- 100L
h <- 100L
nframes <- 100L
scale <- .05
coords <- expand.grid(x = scale*seq_len(w), y = scale*seq_len(h))

fire_pal <- colorRampPalette(c("#000000", "#330000", "#FF0000", "#FFCC00", "#FFFFCC"))

set.seed(0)
space <- opensimplex_space(dimensions = 3)

## ----hot-bubbles, fig.width=10, fig.height=10, fig.dpi=10, out.width="200px", animation.hook='gifski', interval=0.05, message=FALSE, fullbleed=TRUE, eval=do_render----
# speed1 <- .02
# for (i in 1:nframes) {
#   time <- rep(i*speed1, nrow(coords))
#   feed <- matrix(space$sample(coords$x, coords$y, time), w, h)
#   feed <- (4 + feed)/5
#   image(feed,
#         axes = FALSE, ann = FALSE, xaxs = "i", yaxs = "i",
#         zlim = c(0, 1), col = fire_pal(100))
# }

## ----heat-gradient, fig.width=10, fig.height=10, fig.dpi=10, out.width="200px", animation.hook='gifski', interval=0.05, message=FALSE, fullbleed=TRUE, eval=do_render----
# cooling <- matrix(1 - seq_len(h)/h, w, h, byrow = TRUE)
# for (i in 1:nframes) {
#   time <- rep(i*speed1, nrow(coords))
#   feed <- matrix(space$sample(coords$x, coords$y, time), w, h)
#   feed <- (4 + feed)/5
#   image(feed*cooling,
#         axes = FALSE, ann = FALSE, xaxs = "i", yaxs = "i",
#         zlim = c(0, 1), col = fire_pal(100))
# }

## ----flames, fig.width=10, fig.height=10, fig.dpi=10, out.width="200px", animation.hook='gifski', interval=0.05, message=FALSE, fullbleed=TRUE, eval=do_render----
# speed2 <- .05
# for (i in 1:nframes) {
#   time <- rep(i*speed1, nrow(coords))
#   feed <- matrix(space$sample(coords$x, coords$y - speed2*i, time), w, h)
#   feed <- (4 + feed)/5
#   image(feed*cooling,
#         axes = FALSE, ann = FALSE, xaxs = "i", yaxs = "i",
#         zlim = c(0, 1), col = fire_pal(100))
# }

## ----seamless, fig.width=10, fig.height=10, fig.dpi=10, out.width="200px", animation.hook='gifski', interval=0.05, message=FALSE, fullbleed=TRUE, eval=do_render----
# space4d <- opensimplex_space(dimensions = 4)
# 
# coords_cyl   <- expand.grid(x = scale*seq_len(w), i = seq_len(nframes))
# cyl_radius   <- 1
# time_scale   <- 2
# time_cycle   <- time_scale*2*abs(nframes/2 - 1:nframes)/nframes
# for (i in 1:nframes) {
#   time <- rep(time_cycle[i], nrow(coords_cyl))
#   feed <- matrix(space4d$sample(coords_cyl$x,
#                                 cyl_radius*sin(2*pi*(i - coords_cyl$i)/nframes),
#                                 cyl_radius*cos(2*pi*(i - coords_cyl$i)/nframes),
#                                 time), w, h)
#   feed <- (4 + feed)/5
#   image(feed*cooling,
#         axes = FALSE, ann = FALSE, xaxs = "i", yaxs = "i",
#         zlim = c(0, 1), col = fire_pal(100))
# }

Try the opensimplex2 package in your browser

Any scripts or data that you put into this service are public.

opensimplex2 documentation built on March 29, 2026, 5:08 p.m.