Spark functions to control tree growth
spark_linear(x = 0, y = 0, tree = 0, time = 0, constant = 0) spark_decay(x = 0, y = 0, tree = 0, time = 0, multiplier = 2, constant = 0) spark_random(multiplier = 3, constant = 0) spark_nothing()
x | Weight given to the horizontal co-ordinate |
---|---|
y | Weight given to the horizontal co-ordinate |
tree | Weight given to the tree number |
time | Weight given to the time point |
constant | Constant value to be added to the output |
multiplier | Scaling parameter that multiplies the output |
A function that takes coord_x
, coord_y
, id_tree
,
and id_time
as input, and returns a numeric vector as output.
Some arguments to flametree_grow()
take numeric input, but
seg_col
, seg_wid
, shift_x
, and shift_y
all
take functions as their input, and are used to
control how the colours (seg_col
) and width (seg_wid
) of the
segments are created, as well as the horizontal (shift_x
) and
vertical (shift_y
) displacement of the trees are generated. Functions
passed to these arguments take four inputs: coord_x
, coord_y
,
id_tree
, and id_time
as input. Any function that takes
these variables as input and produces a numeric vector of the same length
as the input can be used for this purpose. However, as a
convenience, four "spark" functions are provided that can be used to create
functions that are suitable for this purpose: spark_linear()
,
spark_decay()
, spark_random()
, and spark_nothing()
.
Arguments passed to one of the spark functions determine the specific
function is generated. For example, spark_linear()
can be used to
construct any linear combination of the inputs:
spark_linear(x = 3, y = 2)
would return a function that computes
the sum (3 * coord_x) + (2 * coord_y)
. Different values provided as
input produce different linear functions. Analogously, spark_decay()
returns functions that are exponentially decaying functions of a linear
combination of inputs. The spark_random()
generator can be used to
generate functions that return random values, and spark_nothing()
produces a function that always returns zero regardless of input.
# returns a linear function of x and y spark_linear(x = 3, y = 2) #> function (coord_x, coord_y, id_tree, id_time) #> { #> (x * coord_x) + (y * coord_y) + (tree * id_tree) + (time * #> id_time) + constant #> } #> <bytecode: 0x7f9ecb7f5288> #> <environment: 0x7f9ecd78cb58> # returns a function of time that decays # exponentially to an asymptote spark_decay(time = .1, constant = .1) #> function (coord_x, coord_y, id_tree, id_time) #> { #> multiplier * exp(-abs((x * coord_x) + (y * coord_y) + (tree * #> id_tree) + (time * id_time))^2) + constant #> } #> <bytecode: 0x7f9ecc80c2e8> #> <environment: 0x7f9ecf487718> # returns a numeric vector containing # copies of the same uniform random number # constrained to lie between -2.5 and 2.5 spark_random(multiplier = 5) #> function (coord_x, coord_y, id_tree, id_time) #> { #> n <- length(coord_x) #> u <- stats::runif(1, min = -multiplier/2, max = multiplier/2) + #> constant #> return(rep(u, n)) #> } #> <bytecode: 0x7f9ecb7e4d10> #> <environment: 0x7f9ece89ba00> # returns a function that always produces # a vector of zeros spark_nothing() #> function (coord_x, coord_y, id_tree, id_time) #> { #> n <- length(coord_x) #> return(rep(0, n)) #> } #> <bytecode: 0x7f9ecb7f2bc0> #> <environment: 0x7f9ecaf14140>