mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user