From 3ca1790908d197409e832724538cd48e12571d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Thu, 6 Dec 2018 14:56:30 +0100 Subject: [PATCH] [python/turtle] The Y axis is oriented upwards --- python/port/mod/turtle/turtle.cpp | 10 +++++----- python/port/mod/turtle/turtle.h | 3 +++ python/port/mod/turtle/turtle_icon.png | Bin 283 -> 829 bytes 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/python/port/mod/turtle/turtle.cpp b/python/port/mod/turtle/turtle.cpp index b94018219..6e3e53a84 100644 --- a/python/port/mod/turtle/turtle.cpp +++ b/python/port/mod/turtle/turtle.cpp @@ -25,7 +25,7 @@ void Turtle::forward(mp_float_t length) { void Turtle::left(mp_float_t angle) { setHeading( - ((m_heading - k_headingOffset) + (angle * k_headingScale)) / k_headingScale + k_invertedYAxisCoefficient * ((m_heading - k_headingOffset) + k_invertedYAxisCoefficient * (angle * k_headingScale)) / k_headingScale ); } @@ -59,13 +59,13 @@ void Turtle::goTo(mp_float_t x, mp_float_t y) { } mp_float_t Turtle::heading() const { - return (m_heading - k_headingOffset) / k_headingScale; + return k_invertedYAxisCoefficient * (m_heading - k_headingOffset) / k_headingScale; } void Turtle::setHeading(mp_float_t angle) { micropython_port_vm_hook_loop(); - m_heading = angle * k_headingScale + k_headingOffset; + m_heading = k_invertedYAxisCoefficient * angle * k_headingScale + k_headingOffset; Ion::Display::waitForVBlank(); erase(); @@ -110,7 +110,7 @@ void Turtle::setVisible(bool visible) { // Private functions KDPoint Turtle::position(mp_float_t x, mp_float_t y) const { - return KDPoint(round(x + k_xOffset), round(y + k_yOffset)); + return KDPoint(round(x + k_xOffset), round(k_invertedYAxisCoefficient * y + k_yOffset)); } bool Turtle::hasUnderneathPixelBuffer() { @@ -174,7 +174,7 @@ const KDColor * Turtle::icon() { ); } - int frame = ((m_heading / (2*M_PI)) * k_numberOfIcons + 0.5); + int frame = (m_heading / (2*M_PI)) * k_numberOfIcons + 0.5; if (frame < 0) { frame = k_numberOfIcons - ((-frame) % k_numberOfIcons) - 1; } else { diff --git a/python/port/mod/turtle/turtle.h b/python/port/mod/turtle/turtle.h index b8ef6b3bb..851c837da 100644 --- a/python/port/mod/turtle/turtle.h +++ b/python/port/mod/turtle/turtle.h @@ -67,6 +67,9 @@ public: private: static constexpr mp_float_t k_headingOffset = M_PI_2; static constexpr mp_float_t k_headingScale = M_PI / 180; + /* The Y axis is oriented upwards in Turtle and downwards in Kandinsky, so we + * need to invert some values, hence k_invertedYAxisCoefficient. */ + static constexpr int k_invertedYAxisCoefficient = -1; static constexpr KDCoordinate k_xOffset = Ion::Display::Width / 2; static constexpr KDCoordinate k_yOffset = (Ion::Display::Height - 18) / 2; static constexpr int k_numberOfIcons = 8; diff --git a/python/port/mod/turtle/turtle_icon.png b/python/port/mod/turtle/turtle_icon.png index 0af8c191b303a521ba8d36f0dac07098b721defe..f722be7f174617a5e55409e4c062c8e930ee96d4 100644 GIT binary patch literal 829 zcmeAS@N?(olHy`uVBq!ia0vp^oIvcs!3HE%rry5^q*&4&eH|GXHuiJ>Nn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4FdyXWM)W2NrbPDRdRl= zUSdjqQmS4>ZUImS1A|S46_A;mT9T+xk(-lOY*k^a1Xf`MWP^nDl@!2AO0sR0B76fB zob!uP6-@O^^bC~jxD*r=Y>HCStb$zJpxS{vTcwPWk^(Dz{qpj1y>er{{GxPyLrY6b zeFGzXBO_g)3f4M^0=zbG>mXfw!sJ3||=N)$1uJvRCv%aI%d z@hMmo=v6x|8+~}N*>U+CQjY`%a4)7binN>V{5Ntv4bZIH}@i~oU`V!=jYn( zmsJ<$mrPjvX#4-CQ;r;~@XxN{nA$3nU-XpaH;2f#<&XKk@L5KuM1Cz^<6VKFUdVRd-mrq#~Gpv*dqd%J=U|fD(5SOaO`AbQF+QF_CfoQ%HqIH z`~6>?m%e|_&;Hil_9@3-O8GChV$^anDW3o|wuWhT)K8yKKfVy=RsSxNL5v8 zAUKYhL_{bECL*HOeR*`KF>Ze7cd-%zHlW8FC$o+-C4%c&@LTG5-kPB)&r>%D5Nofb zfT``4!~x5iijKssvJ~4{1zsm#N9Js8agcFzI>@*KWKY|re0Uwe_jHzQO~%iWnXa9s zsa;Q===$UvLKU4q!002ovPDHLk FV1j-icD?`r