Se si modifica la modalità di colore
turtle.colormode(1)
allora i colori possono essere impostati con triple di numeri reali con valori in [0.0, 1.0].
Bianco -> Quasi nero
Passa gradualmente da bianco a nero facendo 100 passi ma scendendo (relativamente) del 1%: 1.0000, 0,9900, 0,9801, 0,9703, ... 0,3697

import turtle
WIDTH = 500
HEIGHT = 500
BGCOLOR = "#808080"
SPEED = 0
TITLE = "Gradiente: bianco -> quasi nero"
PASSI = 100
PERCENT = 0.01
SPAZIO = 0.05*HEIGHT
PENSIZE = (HEIGHT-2*SPAZIO)/PASSI
xMAX = +WIDTH/2-SPAZIO
xMIN = -xMAX
yMAX = +HEIGHT/2-SPAZIO
turtle.setup(WIDTH, HEIGHT)
turtle.bgcolor(BGCOLOR)
turtle.colormode(1)
turtle.hideturtle()
turtle.pensize(PENSIZE)
turtle.speed(SPEED)
turtle.title(TITLE)
y=yMAX
numero=1.0
for passo in range(PASSI):
colore = (numero, numero, numero)
print("%12f -> %s" %(y, colore))
turtle.pencolor(colore)
turtle.penup()
turtle.setposition(xMIN, y)
turtle.pendown()
turtle.setposition(xMAX, y)
numero -= PERCENT*numero
y -= PENSIZE
Utilizza 2%: 1,0000, 0,9800, 0,9604, 0,9412, ..., 0,1353

PERCENT = 0.02
Funzione seno
Tra le infinite possibilità di intervenire sui valori in [0.0, 1.0] considera la funzione seno da 0 a pi/2.
Confronta i due gradienti seno e lineare

import math # sin()
import turtle # ...
WIDTH = 800
HEIGHT = 400
BGCOLOR = "#808080"
SPEED = 0
TITLE = "Seno / Lineare"
PASSI = 200 # Numero di linee verticali
SPAZIO = 0.10*HEIGHT # La cornice grigia
PENSIZE = (WIDTH-2*SPAZIO)/PASSI # Distanza tra le linee verticali
xMIN = -WIDTH/2+SPAZIO # Prima colonna colorata
yMAX = +HEIGHT/2-SPAZIO # Dall'alto
yMIN = -yMAX # ... verso il basso
turtle.setup(WIDTH, HEIGHT)
turtle.bgcolor(BGCOLOR)
turtle.colormode(1) # Codici da 0.0 a 1.0
turtle.hideturtle()
turtle.pensize(PENSIZE)
turtle.speed(SPEED)
turtle.title(TITLE)
x = xMIN # Gradiente con la funzione seno
angolo = 0
DELTA = (math.pi/2)/PASSI
for passo in range(PASSI):
numero = math.sin(angolo)
colore = (numero, numero, numero)
turtle.pencolor(colore)
turtle.penup() ; turtle.setposition(x, yMAX)
turtle.pendown(); turtle.setposition(x, 0)
x += PENSIZE
angolo += DELTA
x = xMIN # Gradiente lineare
for passo in range(PASSI):
numero = passo/PASSI
colore = (numero, numero, numero)
turtle.pencolor(colore)
turtle.penup() ; turtle.setposition(x, 0)
turtle.pendown(); turtle.setposition(x, yMIN)
x += PENSIZE
Osserva il diverso andamento delle due funzioni
