diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-30 18:05:10 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-30 18:05:10 (GMT) |
commit | 78244d328918b149b86d9b925010e934244d0137 (patch) | |
tree | 54228d6e3480fc309143a4ed3d9deb0d51994f56 /func.cc | |
parent | a70715ab8c31160f1be2a74d208681c2ad422bbb (diff) |
Clifford Wolf:
Improved value handling
Fixed math functions
Improved control statements
git-svn-id: http://svn.clifford.at/openscad/trunk@39 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'func.cc')
-rw-r--r-- | func.cc | 34 |
1 files changed, 27 insertions, 7 deletions
@@ -80,52 +80,72 @@ QString BuiltinFunction::dump(QString indent, QString name) const return QString("%1builtin function %2();\n").arg(indent, name); } +static double deg2rad(double x) +{ + while (x < 0.0) + x += 360.0; + while (x >= 360.0) + x -= 360.0; + x = x * M_PI * 2.0 / 360.0; + return x; +} + +static double rad2deg(double x) +{ + x = x * 360.0 / (M_PI * 2.0); + while (x < 0.0) + x += 360.0; + while (x >= 360.0) + x -= 360.0; + return x; +} + Value builtin_sin(const QVector<Value> &args) { if (args[0].type == Value::NUMBER) - Value(sin(args[0].num)); + return Value(sin(deg2rad(args[0].num))); return Value(); } Value builtin_cos(const QVector<Value> &args) { if (args[0].type == Value::NUMBER) - Value(cos(args[0].num)); + return Value(cos(deg2rad(args[0].num))); return Value(); } Value builtin_asin(const QVector<Value> &args) { if (args[0].type == Value::NUMBER) - Value(asin(args[0].num)); + return Value(rad2deg(asin(args[0].num))); return Value(); } Value builtin_acos(const QVector<Value> &args) { if (args[0].type == Value::NUMBER) - Value(acos(args[0].num)); + return Value(rad2deg(acos(args[0].num))); return Value(); } Value builtin_tan(const QVector<Value> &args) { if (args[0].type == Value::NUMBER) - Value(tan(args[0].num)); + return Value(tan(deg2rad(args[0].num))); return Value(); } Value builtin_atan(const QVector<Value> &args) { if (args[0].type == Value::NUMBER) - Value(atan(args[0].num)); + return Value(rad2deg(atan(args[0].num))); return Value(); } Value builtin_atan2(const QVector<Value> &args) { if (args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) - Value(atan2(args[0].num, args[1].num)); + return Value(rad2deg(atan2(args[0].num, args[1].num))); return Value(); } |