Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

consigli risoluzione 3.3

M
Marco.Ceccarelli (840 points)
9 30 38
in Es3 by (840 points)
closed by

ciao ragazzi, con il terzo esercizio dell'homework non ci sto capendo proprio nulla, sapete darmi qualche consiglio crying

721 views
closed with the note: deadline expired

2 Answers

P
Powner (5600 points)
36 68 85
by (5.6k points)

L'esercizio richiede:

  • che per ogni quadrupla della lista data in input devi essere in grado di rintracciare i punti collegati a quello dato all'interno dell'immagine; quindi prima cosa devi fare in modo di trovare un algoritmo che scova i punti adiacenti e dello stesso colore di quello iniziale, poi i punti adiacenti e dello stesso colore a quelli appena trovati e così via.
  • Inoltre, tutti questi punti fanno parte dell'area, e devi ricolorarli del colore c1, oltre a quantificarli (l'esercizio chiede infatti anche di returnare il numero di pixel).
  • infine, devi rintracciare i punti del perimetro, ovvero quelli che si trovano ai bordi di quelli trovati finora, e colorarli del colore c2 (oltre a calcolare il numero anche di questi); per fare questo, puoi lavorare sui colori che circondano i pixel che stai analizzando: un esempio (ma devi trovare la soluzione più adatta all'algoritmo che hai pensato e che stai implementando) è di verificare quanti pixel del colore iniziale ci sono. Se ce ne sono meno di 4, non può che essere un punto di bordo, e dovrai quindi trattarlo come tale.
Se hai altri dubbi dimmi e vediamo se posso aiutarti.
M
Marco.Ceccarelli (840 points)
9 30 38
by (840 points)
il programma che ho realizzato funziona per i primi 3 test e per il 6 per tutti gli altri no, quindi sto pensando di cancellarlo e di iniziarlo nuovamente, potrei provare a fare un ciclo while con la condizione che tutti i 4 pixel connessi debbano essere dello stesso colore, cosa ne pensi?
P
Powner (5600 points)
36 68 85
by (5.6k points)
Dipende come tratti le eccezioni del while, fondamentalmente potrebbe essere un algoritmo funzionante ma dipende da mille fattori.
M
Marco.Ceccarelli (840 points)
9 30 38
by (840 points)
la cosa che mi risulta difficile è impostare la condizione, adesso sto usando un ciclo for e una condizione if, ma non capisco per quante volte far ripetere il ciclo
P
Powner (5600 points)
36 68 85
by (5.6k points)
In realtà si può fare anche il for, ma perché hai rinunciato al while? Una condizione da impostare l'hai detta tu stesso: tutti i 4 connessi devono essere dello stesso colore (ovviamente il punto su cui il while lavora deve cambiare ogni volta) ed è fatta no?
M
Marco.Ceccarelli (840 points)
9 30 38
by (840 points)
si ma non riesco a cambiare punto, faccio il ciclo while con la condizione dei 4 adiacenti uguali, poi non riesco a fargli analizzare i punti che ha trovato
Gianluigi (1420 points)
10 17 30
by (1.4k points)
Ciao,

io ho risolto l'esercizio poco fa, dopo aver passato un bel po' di tempo a ragionare proprio sulle condizioni giuste da impostare. Forse possono aiutarti le seguenti osservazioni:
- la prima volta che trovi i pixel adiacenti, essi sono tutti "nuovi", ma già quando vai a calcolare i pixel adiacenti di questi appena trovati avrai dei pixel già trovati; magari una delle tue condizioni può essere quella di scartare questi pixel "duplicati" nelle tue successive iterazioni

- i "set" ti aiutano ad avere sequenze di elementi non duplicati

- il bordo lo puoi vedere come l'insieme di "tutti i punti connessi" meno i punti con meno di 4 pixel adiacenti

- colorare alla fine può risultare più lento, ma ti rende meno complicato scrivere il codice
M
Marco.Ceccarelli (840 points)
9 30 38
by (840 points)
purtroppo sono ancora alla prima condizione, trovati i primi 4 punti non capisco quale condizione usare affinché svolga la ricerca fino alla fine
Gianluigi (1420 points)
10 17 30
by (1.4k points)
A questo punto dovresti rifare la ricerca dei punti adiacenti per ognuno 4 punti ottenuti, ottenendo così 16 punti,ma di questi 16, solo 10 sono nuovi e ti espandono davvero l'area. Quindi nella prossima iterazione di concentrerai solo su questi.
E questa cosa si ripete ad ogni interazione, fino a che l'insieme dei punti che ti espandono davvero l'area sarà vuoto ;)
M
Marco.Ceccarelli (840 points)
9 30 38
by (840 points)
si ma non riesco a dirgli di fare il controllo sui nuovi punti, faccio il ciclo while con la condizione dei 4 adiacenti uguali, poi non riesco a fargli analizzare i punti che ha trovato
Gianluigi (1420 points)
10 17 30
by (1.4k points)
Il ciclo while con quella condizione la' pero' non ti fa prendere i punti del bordo, che non hanno tutti e 4 gli adiacenti dello stesso colore, ma solo 2/3. Non riesco a immaginarmi una soluzione seguendo questa strada che stai seguendo tu.