From dfb5b90e557dd8f3e703ce26a451e009b02159e4 Mon Sep 17 00:00:00 2001 From: fmOOmf <98671961+fmOOmf@users.noreply.github.com> Date: Wed, 26 Oct 2022 19:43:33 +0200 Subject: [PATCH] =?UTF-8?q?Modif=20pour=20le=20circle=20avec=20angle=20n?= =?UTF-8?q?=C3=A9gatif=20(modif=20for=20circle=20with=20negative=20angle)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/port/mod/turtle/turtle.cpp | 52 +++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/python/port/mod/turtle/turtle.cpp b/python/port/mod/turtle/turtle.cpp index abba04f46..b3568db70 100644 --- a/python/port/mod/turtle/turtle.cpp +++ b/python/port/mod/turtle/turtle.cpp @@ -74,19 +74,51 @@ void Turtle::left(mp_float_t angle) { void Turtle::circle(mp_int_t radius, mp_float_t angle) { mp_float_t oldHeading = heading(); mp_float_t length = std::fabs(angle * k_headingScale * radius); + /* if (length > 1) { - for (int i = 1; i < length; i++) { - mp_float_t progress = i / length; - // Move the turtle forward - if (forward(1)) { - // Keyboard interruption. Return now to let MicroPython process it. - return; + if (angle > 0) { + for (int i = 1; i < length; i++) { + mp_float_t progress = i / length; + // Move the turtle forward + if (forward(1)) { + // Keyboard interruption. Return now to let MicroPython process it. + return; + } + setHeadingPrivate(oldHeading+std::copysign(angle*progress, radius)); } - setHeadingPrivate(oldHeading+std::copysign(angle*progress, radius)); - } - forward(1); - setHeading(oldHeading+angle); + forward(1); + setHeading(oldHeading+angle); + } else { + for (int i = 1; i < length; i++) { + mp_float_t progress = i / length; + // Move the turtle backward + if (forward(-1)) { + // Keyboard interruption. Return now to let MicroPython process it. + return; + } + setHeadingPrivate(oldHeading-std::copysign(angle*progress, radius)); + } + forward(-1); + setHeading(oldHeading+angle); + } } + */ + int direction = 1; // 1=fwd, -1=backward + if (angle < 0) {direction =-1;} + if (length > 1) { + for (int i = 1; i < length; i++) { + mp_float_t progress = i / length; + // Move the turtle forward + if (forward(direction)) { + // Keyboard interruption. Return now to let MicroPython process it. + return; + } + setHeadingPrivate(oldHeading+std::copysign(angle*progress, direction*radius)); + } + forward(direction); + setHeading(oldHeading+angle); + } + } bool Turtle::goTo(mp_float_t x, mp_float_t y) {