Il
PicoDisplay per
Raspberry PI Pico ha varie primitive per disegnare sul display, ma tra queste
manca la possibilità di disegnare delle
linee.
Le uniche linee che è possibile disegnare nativamente sono quelle orizzontali tramite l'istruzione display.pixel_span(x, y, length).
La seguente funzione
MicroPython permette di disegnare una
linea tra un punto
A (x1, y1) e un punto
B (x2, y2)
import picodisplay as display
import math
def line(x1, y1, x2, y2):
if x1 == x2 and y1 == y2:
# punto
display.pixel(x1, y1)
else:
# linea
ox = x1
oy = y1
w = x2 - x1
h = y2 - y1
greaterDx = math.copysign(w, 1) > math.copysign(h, 1)
# calcolo inclinazione linea
m = 1.0
if w != 0:
m = h / w
# disegno linea
if greaterDx:
if x1 > x2:
ox = x2
oy = y2
w = math.copysign(w, 1)
for x in range(w + 1):
nx = ox + x
ny = oy
if h != 0:
ny = oy + (m * x)
display.pixel(int(nx), int(ny))
else:
if y1 > y2:
ox = x2
oy = y2
h = math.copysign(h, 1)
for y in range(h + 1):
nx = ox
if w != 0:
nx = ox + (y / m)
ny = oy + y
display.pixel(int(nx), int(ny))
La linea viene disegnata implementando l'equazione della
retta y = m * x, disegnando ogni singolo punto con la funzione nativa
display.pixel(x, y).
Richiede la libreria math oltre, naturalmente, alla libreria picodisplay.
Questa è una demo che usa la funzione
line per tracciare 3 linee colorate
# serve la funzione 'line' precedente
width = display.get_width()
height = display.get_height()
buffer = bytearray(width * height * 2) # 2-bytes per pixel (RGB565)
display.init(buffer)
display.set_backlight(1.0)
display.set_pen(0, 0, 0)
display.clear()
# linea rossa
display.set_pen(255, 0, 0)
line(100, 100, 50, 50)
# linea verde
display.set_pen(0, 255, 0)
line(100, 100, 150, 60)
# linea blu
display.set_pen(0, 0, 255)
line(150, 60, 210, 100)
display.set_pen(128, 0, 0)
display.text("SGART.IT", 150, 5, 170, 2)
display.update()
e questo è il risultato sul display
demo linee