diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-02-21 08:16:09 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-02-21 08:16:09 (GMT) |
commit | 230e3306fc0195fa7251884ee73f753ce04b4711 (patch) | |
tree | 48453ea0b3ce1b87efff2e3e27c12bdb4b168b42 /src | |
parent | 332e835f878d477102228a0659fd15c6700b36fe (diff) |
Clifford Wolf:
Added exp(x), log(b, x), log(x) and ln(x) functions
git-svn-id: http://svn.clifford.at/openscad/trunk@447 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'src')
-rw-r--r-- | src/func.cc | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/src/func.cc b/src/func.cc index fa04750..fa301dc 100644 --- a/src/func.cc +++ b/src/func.cc @@ -183,13 +183,6 @@ Value builtin_atan2(const QVector<QString>&, const QVector<Value> &args) return Value(); } -Value builtin_pow(const QVector<QString>&, const QVector<Value> &args) -{ - if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) - return Value(pow(args[0].num, args[1].num)); - return Value(); -} - Value builtin_round(const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) @@ -211,6 +204,13 @@ Value builtin_floor(const QVector<QString>&, const QVector<Value> &args) return Value(); } +Value builtin_pow(const QVector<QString>&, const QVector<Value> &args) +{ + if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) + return Value(pow(args[0].num, args[1].num)); + return Value(); +} + Value builtin_sqrt(const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) @@ -218,6 +218,29 @@ Value builtin_sqrt(const QVector<QString>&, const QVector<Value> &args) return Value(); } +Value builtin_exp(const QVector<QString>&, const QVector<Value> &args) +{ + if (args.size() == 1 && args[0].type == Value::NUMBER) + return Value(exp(args[0].num)); + return Value(); +} + +Value builtin_log(const QVector<QString>&, const QVector<Value> &args) +{ + if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) + return Value(log(args[1].num) / log(args[0].num)); + if (args.size() == 1 && args[0].type == Value::NUMBER) + return Value(log(args[0].num) / log(10)); + return Value(); +} + +Value builtin_ln(const QVector<QString>&, const QVector<Value> &args) +{ + if (args.size() == 1 && args[0].type == Value::NUMBER) + return Value(log(args[0].num)); + return Value(); +} + Value builtin_str(const QVector<QString>&, const QVector<Value> &args) { QString str; @@ -270,11 +293,14 @@ void initialize_builtin_functions() builtin_functions["tan"] = new BuiltinFunction(&builtin_tan); builtin_functions["atan"] = new BuiltinFunction(&builtin_atan); builtin_functions["atan2"] = new BuiltinFunction(&builtin_atan2); - builtin_functions["pow"] = new BuiltinFunction(&builtin_pow); builtin_functions["round"] = new BuiltinFunction(&builtin_round); builtin_functions["ceil"] = new BuiltinFunction(&builtin_ceil); builtin_functions["floor"] = new BuiltinFunction(&builtin_floor); + builtin_functions["pow"] = new BuiltinFunction(&builtin_pow); builtin_functions["sqrt"] = new BuiltinFunction(&builtin_sqrt); + builtin_functions["exp"] = new BuiltinFunction(&builtin_exp); + builtin_functions["log"] = new BuiltinFunction(&builtin_log); + builtin_functions["ln"] = new BuiltinFunction(&builtin_ln); builtin_functions["str"] = new BuiltinFunction(&builtin_str); builtin_functions["lookup"] = new BuiltinFunction(&builtin_lookup); initialize_builtin_dxf_dim(); |