This page contains descriptions of general purpose utility commands and functions available in Kojo.

### Environment

Command/Function | Description |
---|---|

`size(w, h)` |
sets the size of the canvas to the given width and height. |

`cwidth` |
returns the current width of the canvas. |

`cheight` |
returns the current height of the canvas. |

`originBottomLeft()` |
situates the origin at the bottom left of the canvas. |

`setup { drawing code }` |
calls the drawing code once at the beginning of your program. |

`drawLoop { drawing code }` |
calls the drawing code at the default refresh rate, which is 50 times a second. |

`setRefreshRate(n)` |
sets the refresh rate to `n` times per second. The next time a `clear()` is done, the refresh rate is reset to its default value of 50. |

`erasePictures()` |
erases all the pictures in the canvas. |

### Random numbers

Command/Function | Description |
---|---|

`random(upperBound)` |
Returns a random integer between `0` (inclusive) and `upperBound` (exclusive). |

`random(lowerBound, upperBound)` |
Returns a random integer between `lowerBound` (inclusive) and `upperBound` (exclusive). |

`randomDouble(upperBound)` |
Returns a random decimal fraction between `0` (inclusive) and `upperBound` (exclusive). |

`randomDouble(lowerBound, upperBound)` |
Returns a random decimal fraction between `lowerBound` (inclusive) and `upperBound` (exclusive). |

`randomNormalDouble` |
Returns a normally distributed number with mean `0` and standard deviation `1` . |

`randomBoolean` |
Returns a random boolean value. This is like a coin toss. |

`randomFrom(seq)` |
Returns a random value from the given sequence. |

`randomFrom(seq, weights)` |
Returns a random value from the given sequence as per the given distribution of weights. |

`randomColor` |
Returns a random color. |

`initRandomGenerator()` |
Initializes the Kojo random number generater with a random seed, and prints out the seed for future reference. |

`initRandomGenerator(seed)` |
Initializes the Kojo random number generater with the given seed (potentially obtained via the previous command) to enable the reproducing of random patterns. |

### Math

Function | Description |

`mathx.map(value, low1, high1, low2, high2)` |
Maps the given value from the range `(low1, high1)` to the range `(low2, high2)` . |

`mathx.lerp(value1, value2, amt)` |
Returns the interpolation as per the given fraction `amt` in the range `(value1, value2)` . |

`mathx.constrain(value, min, max)` |
Constrains the given `value` between `min` and `max` . |

`mathx.distance(x1, y1, x2, y2)` |
Calculates the distance between (x1, y1) and (x2, y2). |

`mathx.distance(point1, point2)` |
Calculates the distance between point1 and point2. |

`mathx.angle(x1, y1, x2, y2)` |
calculates the angle in degrees between the line from (x1, y1) to (x2, y2) and the horizontal. |

`mathx.angle(point1, point2)` |
calculates the angle in degrees between the line from point1 to point2 and the horizontal. |

`rangeTill(from, untill, step)` |
returns a range that starts from `from` , goes until (but excluding) `until` , and steps up by `step` . See example. |

### Examples

#### rangeTill

```
rangeTill(4, 10, 2).toArray //> res16: Array[Int] = Array(4, 6, 8)
rangeTill(4, 11.5, 2.5).toArray //> res17: Array[BigDecimal] = Array(4.0, 6.5, 9.0)
```