Gradienti – 3

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

Lascia un commento