# orx-expression-evaluator Tools to evaluate strings containing mathematical expressions. # Expression evaluator ```kotlin val expression = "x + y" val constants = mapOf("x" to 1.0, "y" to 2.0) evaluateExpression(expression, constants) ``` ## Built-in expression functions Unary functions: * `abs(x)` * `acos(x)` * `asin(x)` * `atan(x)` * `ceil(x)` * `cos(x)` * `degrees(x)` * `exps(x)` * `floor(x)` * `radians(x)` * `round(x)` * `saturate(x)`, clamp x to [0.0, 1.0] * `sqrt(x)` * `tan(x)` Binary functions: * `atan2(x, y)` * `length(x, y)`, the Euclidean length of the vector (x,y) * `max(x, y)`, * `min(x, y)`, * `pow(x, n)` * `random(x, y)`, return a random number in [x, y) Ternary functions: * `length(x, y, z)`, the Euclidean length of the vector (x, y, z) * `max(x, y, z)` * `min(x, y, z)` * `mix(l, r, f)` * `smoothstep(e0, e1, x)` * `sum(x, y, z)` Quaternary functions: * `length(x, y, z, w)`, the Euclidean length of the vector (x, y, z) * `max(a, b, c, d)` * `min(a, b, c, d)` * `sum(a, b, c, d)` Quinary functions: * `map(x0, x1, y0, y1, v)` * `max(a, b, c, d, e)` * `min(a, b, c, d, e)` * `sum(a, b, c, d, e)` # Compiled functions ```kotlin val expression = "x * 5.0 + cos(x)" val f = compileFunction1(expression, "x") f(0.0) ``` ```kotlin val expression = "x * 5.0 + cos(x) * y" val f = compileFunction2(expression, "x", "y") f(0.0, 0.4) ``` # Property delegates ```kotlin val constants = mutableMapOf("width" to 300.0) val settings = object { var xExpression = "cos(t) * 50.0 + width / 2.0" } val xFunction by watchingExpression1(settings::xExpression, "t", constants) xFunction(1.0) ``` ## Demos ### DemoExpressionEvaluator01 [source code](src/demo/kotlin/DemoExpressionEvaluator01.kt) ![DemoExpressionEvaluator01Kt](https://raw.githubusercontent.com/openrndr/orx/media/orx-jvm/orx-expression-evaluator/images/DemoExpressionEvaluator01Kt.png) ### DemoExpressionEvaluator02 [source code](src/demo/kotlin/DemoExpressionEvaluator02.kt) ![DemoExpressionEvaluator02Kt](https://raw.githubusercontent.com/openrndr/orx/media/orx-jvm/orx-expression-evaluator/images/DemoExpressionEvaluator02Kt.png)