[python/turtle] Fix rounding errors

Some horizontal/vertical lines were not properly drawn
Example script:
from math import *
from turtle import *
def a():
  def carre(n):
    fd(n)
    right(90)
    fd(n)
    right(90)
    fd(n)
    right(90)
    fd(n)
    right(90)
  penup()
  goto(-158,109)
  pendown()
  carre(100)
  for j in range(10):
    for i in range(26):
      penup()
      fd(2)
      pendown()
      carre(10)
      penup()
      fd(10)
      pendown()
    penup()
    goto(-158,109-10*(j+1))
    pendown()
This commit is contained in:
Léa Saviot
2019-04-08 14:53:36 +02:00
committed by Émilie Feral
parent bcfe9469e8
commit e8b3db76b2

View File

@@ -118,8 +118,8 @@ bool Turtle::goTo(mp_float_t x, mp_float_t y) {
* the computation of the position on the principal coordinate is done
* using a barycenter, roundings might skip some pixels, which results in
* a dotted line. */
mp_float_t currentX = principalDirection == PrincipalDirection::Y ? x * progress + oldx * (1 - progress) : oldx + (x > oldx ? i : -i);
mp_float_t currentY = principalDirection == PrincipalDirection::X ? y * progress + oldy * (1 - progress) : oldy + (y > oldy ? i : -i);
mp_float_t currentX = xLength == 0 ? x : (principalDirection == PrincipalDirection::Y ? x * progress + oldx * (1 - progress) : oldx + (x > oldx ? i : -i));
mp_float_t currentY = yLength == 0 ? y : (principalDirection == PrincipalDirection::X ? y * progress + oldy * (1 - progress) : oldy + (y > oldy ? i : -i));
if (dot(currentX, currentY) || draw(false)) {
// Keyboard interruption. Return now to let MicroPython process it.
return true;