diff --git a/src/canvas.cpp b/src/canvas.cpp --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -23,18 +23,12 @@ #include #include +#include #include -// this function is used in executer and canvas: -#define ROUND2INT(x) ( (x) >= 0 ? (int)( (x) + .5 ) : (int)( (x) - .5 ) ) -#ifndef M_PI -#define M_PI 3.14159265358979323846264338327950288419717 -#endif - -const double DegToRad = M_PI / 180.0; int kTurtleZValue = 1; int kCanvasFrameZValue = -10000; int kCanvasMargin = 20; @@ -143,16 +137,16 @@ void Canvas::slotForward(double x) { - double x2 = turtle->pos().x() + (x * std::sin(turtle->angle() * DegToRad)); - double y2 = turtle->pos().y() - (x * std::cos(turtle->angle() * DegToRad)); + double x2 = turtle->pos().x() + (x * std::sin(qDegreesToRadians(turtle->angle()))); + double y2 = turtle->pos().y() - (x * std::cos(qDegreesToRadians(turtle->angle()))); drawLine(turtle->pos().x(), turtle->pos().y(), x2, y2); slotGo(x2, y2); } void Canvas::slotBackward(double x) { - double x2 = turtle->pos().x() - ( x * std::sin(turtle->angle() * DegToRad) ); - double y2 = turtle->pos().y() + ( x * std::cos(turtle->angle() * DegToRad) ); + double x2 = turtle->pos().x() - ( x * std::sin(qDegreesToRadians(turtle->angle()))); + double y2 = turtle->pos().y() + ( x * std::cos(qDegreesToRadians(turtle->angle()))); drawLine(turtle->pos().x(), turtle->pos().y(), x2, y2); slotGo(x2, y2); } @@ -164,7 +158,7 @@ void Canvas::slotPenWidth(double width) { - int w = qMax(ROUND2INT(width), 0); + int w = qMax(static_cast(round(width)), 0); if (w == 0) { penWidthIsZero = true; return; diff --git a/src/directiondialog.cpp b/src/directiondialog.cpp --- a/src/directiondialog.cpp +++ b/src/directiondialog.cpp @@ -22,10 +22,6 @@ #include using std::atan; -#ifndef M_PI -#define M_PI 3.14159265358979323846264338327950288419717 -#endif - #include #include #include @@ -39,12 +35,12 @@ #include #include #include +#include #include #include #include -#define ROUND2INT(x) ( (x) >= 0 ? (int)( (x) + .5 ) : (int)( (x) - .5 ) ) //BEGIN DirectionCanvas widget @@ -376,15 +372,15 @@ { // The canvas has changed, update the spinbox and command-LineEdit skipValueChangedEvent = true; - directionSpin->setValue(ROUND2INT(deg)); + directionSpin->setValue(static_cast(round(deg))); updateCommandBox(); } void DirectionDialog::updatePreviousDegrees(double deg) { // The canvas has changed, update the spinbox and commandBox skipValueChangedEvent = true; - previousDirectionSpin->setValue(ROUND2INT(deg)); + previousDirectionSpin->setValue(static_cast(round(deg))); updateCommandBox(); } diff --git a/src/interpreter/executer.cpp b/src/interpreter/executer.cpp --- a/src/interpreter/executer.cpp +++ b/src/interpreter/executer.cpp @@ -31,14 +31,9 @@ #include #include +#include -// this function is used in executer and canvas: -#define ROUND2INT(x) ( (x) >= 0 ? (int)( (x) + .5 ) : (int)( (x) - .5 ) ) - -#define DEG2RAD(deg) ( deg * (M_PI / 180) ) -#define RAD2DEG(rad) ( rad * (180 / M_PI) ) - void Executer::initialize(TreeNode* tree, ErrorList* _errorList) { rootNode = tree; @@ -490,18 +485,18 @@ // the iteration state is stored on the variable table if (currentVariableTable()->contains(id)) { - int currentCount = ROUND2INT((*currentVariableTable())[id].number()); + int currentCount = static_cast(round((*currentVariableTable())[id].number())); if (currentCount > 0) { (*currentVariableTable())[id].setNumber(currentCount - 1); } else { currentVariableTable()->remove(id); return; } } else { - if(ROUND2INT(node->child(0)->value()->number())<=0) // handle 'repeat 0' + if(static_cast(round(node->child(0)->value()->number()))<=0) // handle 'repeat 0' return; - currentVariableTable()->insert(id, Value((double)(ROUND2INT(node->child(0)->value()->number()) - 1))); + currentVariableTable()->insert(id, Value(round(node->child(0)->value()->number()) - 1.0)); } newScope = node->child(1); } @@ -1013,42 +1008,42 @@ if (!checkParameterQuantity(node, 1, 20000+Token::Tan*100+90)) return; double deg = node->child(0)->value()->number(); - node->value()->setNumber(tan(DEG2RAD(deg))); + node->value()->setNumber(tan(qDegreesToRadians(deg))); } void Executer::executeSin(TreeNode* node) { // //qDebug() << "called"; if (!checkParameterQuantity(node, 1, 20000+Token::Sin*100+90)) return; double deg = node->child(0)->value()->number(); - node->value()->setNumber(sin(DEG2RAD(deg))); + node->value()->setNumber(sin(qDegreesToRadians(deg))); } void Executer::executeCos(TreeNode* node) { // //qDebug() << "called"; if (!checkParameterQuantity(node, 1, 20000+Token::Cos*100+90)) return; double deg = node->child(0)->value()->number(); - node->value()->setNumber(cos(DEG2RAD(deg))); + node->value()->setNumber(cos(qDegreesToRadians(deg))); } void Executer::executeArcTan(TreeNode* node) { // //qDebug() << "called"; if (!checkParameterQuantity(node, 1, 20000+Token::ArcTan*100+90)) return; double deg = node->child(0)->value()->number(); - node->value()->setNumber(RAD2DEG(atan(deg))); + node->value()->setNumber(qRadiansToDegrees(atan(deg))); } void Executer::executeArcSin(TreeNode* node) { // //qDebug() << "called"; if (!checkParameterQuantity(node, 1, 20000+Token::ArcSin*100+90)) return; double deg = node->child(0)->value()->number(); - node->value()->setNumber(RAD2DEG(asin(deg))); + node->value()->setNumber(qRadiansToDegrees(asin(deg))); } void Executer::executeArcCos(TreeNode* node) { // //qDebug() << "called"; if (!checkParameterQuantity(node, 1, 20000+Token::ArcCos*100+90)) return; double deg = node->child(0)->value()->number(); - node->value()->setNumber(RAD2DEG(acos(deg))); + node->value()->setNumber(qRadiansToDegrees(acos(deg))); } void Executer::executeSqrt(TreeNode* node) { // //qDebug() << "called"; @@ -1067,7 +1062,7 @@ if (!checkParameterQuantity(node, 1, 20000+Token::Round*100+90)) return; double val = node->child(0)->value()->number(); - node->value()->setNumber((double)ROUND2INT(val)); + node->value()->setNumber(round(val)); } void Executer::executeGetDirection(TreeNode* node) { // //qDebug() << "called"; @@ -1085,7 +1080,7 @@ if (!checkParameterType(node, Value::Number, 20000+Token::Mod*100+91)) return; double x = nodeX->value()->number(); double y = nodeY->value()->number(); - double m = (double)(ROUND2INT(x) % ROUND2INT(y)); + double m = (double)(static_cast(round(x)) % static_cast(round(y))); node->value()->setNumber(m); }