HW4bis - ES3 - Ricerca parentele padre-figlio tramite coordinate,diramazioni

AdrianH (840 points)
0 8 17
asked Feb 26, 2019 in HW4bis by AdrianH (840 points)
recategorized Mar 2, 2019 by andrea.sterbini
Salve,

Mi sono bloccato con questo esercizio e non so come andare avanti,

Avevo deciso di fare cosi':

salvare tutte le coordinate dei punti bianchi,nodi e radice,per poi lavorare solo con essi.

poi come continuo?

Ho pensato di unire la liste di tutte le coordinate(ovviamente avendo comunque un modo per differenziare i nodi dai bianchi),per poi ,partendo dalla radice,attraversare tutte le coordinate bianche adiacenti(con x o y spostati di massimo 1 ) finche' non trovo un nodo(che quindi sara' figlio).

(penso che sia piu' lento)Altrimenti ho pensato di girare nodi e radice e vedere tutte le combinazioni tra essi e vedere se ci stanno coordinate contigue che li collegano.

Ma il problema rimane lo stesso,come amministro le diramazioni e figli multipli?

per la prima soluzione dovrei provare tutte le possibili direzioni(con un a funzione a 4 if) dei bianchi che partono da piu' parti da un nodo o si diramano,ma dubito fortemente che lo farebbe in meno di un 1 secondo.

per la seconda soluzione non so neanche dove andare a sbattere con le diramazioni.

c'e' un modo per risolvere questo dilemma?

1 Answer

Best answer
_andrea_ (45670 points)
2 40 297
answered Feb 26, 2019 by _andrea_ (45,670 points)
selected Feb 26, 2019 by AdrianH
Trova il pixel radice nell'immagine, parti da quello con la funzione quadridirezionale (si, quella con 4 if). La funzione fa così: la chiami su un pixel e ti ritorna l'insieme dei nodo che trova percorrendo quella strada. Parti da x,y che è la radice, la funzione ti ritorna quindi l'insieme dei suoi figli, i quali avranno i loro figli i quali avranno i loro figli ecc... La funzione la strutturi così: caso base, se hai un pixel nero ritorni l'insieme vuoto (significa che da quel pixel ottieni un insieme vuoto di figli). Se hai un pixel rosso, lo aggiungi all'insieme di figli che ritornerai, e chiami la funzione quadridirezionale anche su quellp (per fargli ottenere i suoi figli), se invece trovi un pixel bianco vai avanti nelle 3 direzioni (3 perché da una ci vieni e non devi tornare indietro MAI!). Alla fine la funzione ti tornerà i figli del nodo su cui l'hai chiamata, quindi quelli della radice (se la fai bene)
f.cocci (650 points)
1 13 17
commented Mar 25, 2019 by f.cocci (650 points)
Grazie 1000 Andrea, provo a pestare un attimino e vedo cosa ne viene fuori, sono ancora all'inizio e per esperienza ne avro per tutta la settimana.

Per lo meno a differenza dell'es2 qui ho gia un ragionamento. Come metterlo in pratica e' un di cui :-)

Pero se ho capito bene qui  scorrere l'immagine vuole dire procedere un pixel alla volta (nelle diverse direzioni) non c'e' da iterare, tranne che nella prima fase in cui si vanno a identificare le coordinate del nodo radice e dei nodi figli (R).
_andrea_ (45670 points)
2 40 297
commented Mar 25, 2019 by _andrea_ (45,670 points)
No nella prima parte non devi trovare i figli, solo la radice
f.cocci (650 points)
1 13 17
commented Mar 25, 2019 by f.cocci (650 points)
ah perfetto, allora solo una riga di codice da eliminare, in effetti non mi serve visto che devo analizzare i collegamenti bianchi per determinare chi e figli di chi.

Mi sfugge purtroppo ancora come innescare la ricorsione e sopratuto come differenziarla in base alla direzione che prendo.

Io ho la mia radice V di coordinate x,y. Parto da qui. Da qui dev ocontrollare quello che succede a x,y-1, x+1,y, x,y+1 e x-1,y che sono 4.

Mettiamo che trovi che x,y-1 sia White. Su questo devo richiamare la funzione, ma questa a sua volta non effettua il controllo sui suoi confinanti, compreso da dove e' arrivata?.
_andrea_ (45670 points)
2 40 297
commented Mar 25, 2019 by _andrea_ (45,670 points)
Blocchi la direzione da cui vieni. I 4vif si riferiscono a questo
f.cocci (650 points)
1 13 17
commented Mar 25, 2019 by f.cocci (650 points)
Purtroppo continua a non essermi ancora chiaro come dovrebbe funzionare questa 4if, chiedo venia.