This function implements the fractal flame algorithm.

canvas_flame(
  colors,
  background = "#000000",
  iterations = 1000000,
  variations = 0,
  symmetry = 0,
  blend = TRUE,
  weighted = FALSE,
  post = FALSE,
  final = FALSE,
  extra = FALSE,
  display = c("colored", "logdensity"),
  zoom = 1,
  resolution = 1000,
  gamma = 1
)

Arguments

colors

a string or character vector specifying the color(s) used for the artwork.

background

a character specifying the color used for the background.

iterations

a positive integer specifying the number of iterations of the algorithm. Using more iterations results in images of higher quality but also increases the computation time.

variations

an integer (vector) with a minimum of 0 and a maximum of 48 specifying the variations to be included in the flame. The default 0 includes only a linear variation. Including multiple variations (e.g., c(1, 2, 3)) increases the computation time. See the details section for more information about possible variations.

symmetry

an integer with a minimum of -6 and a maximum of 6 indicating the type of symmetry to include in the flame. The default 0 includes no symmetry. Including symmetry decreases the computation time as a function of the absolute symmetry value. See the details section for more information about possible symmetries.

blend

logical. Whether to blend the variations (TRUE) or pick a unique variation in each iteration (FALSE). blend = TRUE increases computation time as a function of the number of included variations.

weighted

logical. Whether to weigh the functions and the variations (TRUE) or pick a function at random and equally weigh all variations (FALSE). weighted = TRUE significantly increases the computation time.

post

logical. Whether to apply a post transformation in each iteration.

final

logical. Whether to apply a final transformation in each iteration.

extra

logical. Whether to apply an additional post transformation after the final transformation. Only has an effect when final = TRUE.

display

a character indicating how to display the flame. colored (the default) displays colors according to which function they originate from. logdensity plots a gradient using the log density of the pixel count.

zoom

a positive value specifying the amount of zooming.

resolution

resolution of the artwork in pixels per row/column. Increasing the resolution does not increases the computation time of this algorithm.

gamma

a numeric value specifying the gamma correction (only used when display = "colored"). Larger values result in brighter images and vice versa.

Value

A ggplot object containing the artwork.

Details

The variation argument can be used to include specific variations into the flame. See the appendix in the references for examples of all variations. Possible variations are:

  • 0: Linear (default)

  • 1: Sinusoidal

  • 2: Spherical

  • 3: Swirl

  • 4: Horsehoe

  • 5: Polar

  • 6: Handkerchief

  • 7: Heart

  • 8: Disc

  • 9: Spiral

  • 10: Hyperbolic

  • 11: Diamond

  • 12: Ex

  • 13: Julia

  • 14: Bent

  • 15: Waves

  • 16: Fisheye

  • 17: Popcorn

  • 18: Exponential

  • 19: Power

  • 20: Cosine

  • 21: Rings

  • 22: Fan

  • 23: Blob

  • 24: PDJ

  • 25: Fan2

  • 26: Rings2

  • 27: Eyefish

  • 28: Bubble

  • 29: Cylinder

  • 30: Perspective

  • 31: Noise

  • 32: JuliaN

  • 33: JuliaScope

  • 34: Blur

  • 35: Gaussian

  • 36: RadialBlur

  • 37: Pie

  • 38: Ngon

  • 39: Curl

  • 40: Rectangles

  • 41: Arch

  • 42: Tangent

  • 43: Square

  • 44: Rays

  • 45: Blade

  • 46: Secant

  • 47: Twintrian

  • 48: Cross

The symmetry argument can be used to include symmetry into the flame. Possible options are:

  • 0: No symmetry (default)

  • -1: Dihedral symmetry

  • 1: Two-way rotational symmetry

  • (-)2: (Dihedral) Three-way rotational symmetry

  • (-)3: (Dihedral) Four-way rotational symmetry

  • (-)4: (Dihedral) Five-way rotational symmetry

  • (-)5: (Dihedral) Six-way rotational symmetry

  • (-)6: (Dihedral) Snowflake symmetry

See also

colorPalette

Author

Koen Derks, koen-derks@hotmail.com

Examples

# \donttest{
set.seed(3)

# Simple example, linear variation, relatively few iterations
canvas_flame(colors = c("dodgerblue", "green"), variations = 0)


# Simple example, linear variation, dihedral symmetry
canvas_flame(colors = c("hotpink", "yellow"), variations = 0, symmetry = -1, iterations = 1e7)


# Advanced example (no-blend, weighted, sinusoidal and spherical variations)
canvas_flame(
  colors = colorPalette("origami"), variations = c(1, 2),
  blend = FALSE, weighted = TRUE, iterations = 1e8
)


# More iterations give much better images
set.seed(123)
canvas_flame(colors = c("red", "blue"), iterations = 1e8, variations = c(10, 17))

# }