Advertisement
davide1409

Scale

Nov 10th, 2019
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.95 KB | None | 0 0
  1. def Segmenti_orizzontali(pict,x,y,dim,col):
  2. #@param pict: Picture; immagine su cui applicare la funzione
  3. #@param x: int; colonna del punto di inizio
  4. #@param y: int; riga del punto di inizio
  5. #@param dim: int; dimensione segmento orizzontale
  6. #@param col: color; colore del segmento orizzonale
  7.  
  8.   c, h ,w = 0, getHeight(pict), getWidth(pict)
  9.   x1,shift = x,0  # x1, x di partenza
  10.  
  11.   #fisso la riga e scorro le colonne per disegnare i segmenti orizzontali che compongono la scala
  12.   for j in range(y,h,dim):  # parto da y e scorro tutta l'altezza di passo dim, in quanto lascio lo spazio per disegnare i segmenti verticali
  13.     for i in range(x, min(w,dim+x)):  # faccio il minimo per evitare di uscire fuori
  14.       #coloro tutti i pixel fino a dim+x, perche' devo arrivare a colorare tutta la lunghezza data
  15.       px = getPixel(pict,i,j)
  16.       setColor(px,col)
  17.    
  18.     #shift e c sono inizializzati a 0 perche' al primo ciclo non verranno utilizzati    
  19.     c+=1
  20.     shift = x1
  21.     #la prossima x da cui partire sara' multipla di dim, sommmata a shift.
  22.     #faccio (dim*c) per evitare di colorare un pixel che verra' colorato da Segmenti_verticali.
  23.     #aggingo lo shift perche' se le coordinate non sono (0,0) ci devo aggiungere lo scostamento dal margine(shift)
  24.     x = (dim*c)+shift # non controllo se e' piu grande di w perche' se lo fosse, il ciclo non verrebbe fatto
  25.  
  26.  
  27. def Segmenti_verticali(pict,x,y,dim,col):
  28. #@param pict: Picture; immagine su cui applicare la funzione
  29. #@param x: int; colonna del punto di inizio
  30. #@param y: int; riga del punto di inizio
  31. #@param dim: int; dimensione segmento verticale
  32. #@param col: color; colore del segmento verticale                                        
  33.  
  34.   if dim !=1:  # se fosse 1 ci pensa Segmenti_orizzontali, perche si tratta di fare scalini grandi un pixel
  35.     h,w = getHeight(pict), getWidth(pict)
  36.    
  37.     #fisso la colonna e scorro le righe per disegnare i segmenti verticali che compongono la scala
  38.     for i in range(x+(dim-1),w,dim): # parto da x+(dim-1) e scorro tutta la larghezza di passo dim, in quanto salto lo spazio occupato dai seg orizzontali
  39.       for j in range(y+1, min(h,(y+dim+1)) ): #parto da y+1 perche' y e' colorato dai seg orizzontali; faccio il minimo per non rischiare di
  40.       #uscire fuori dalla matrice; arrivo a y+dim+1 in modo tale da far notare visivamente che altezza e larghezza degli scalini combaciano
  41.        px = getPixel(pict,i,j)
  42.        setColor(px,col)
  43.          
  44.       y = y+dim # perche' la prossima riga di inizio dipende dalla lunghezza del seg precedentemente disegnato
  45.    
  46.    
  47. def Scala(pict,x,y,dim,col):
  48. #@param pict: Picture; immagine su cui applicare la funzione
  49. #@param x: int; colonna del punto di inizio
  50. #@param y: int; riga del punto di inizio
  51. #@param dim: int; dimensione scalini(assumo che altezza e lunghezza siano uguali)
  52. #@param col: color; colore della scala
  53.  
  54.   Segmenti_orizzontali(pict,x,y,dim,col)
  55.   Segmenti_verticali(pict,x,y,dim,col)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement