Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2021-22 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

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

AdrianH (840 points)
0 8 17
in HW4bis by (840 points)
recategorized by
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 41 297
by (45.7k points)
selected by
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
by (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 41 297
by (45.7k points)
No nella prima parte non devi trovare i figli, solo la radice
f.cocci (650 points)
1 13 17
by (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 41 297
by (45.7k points)
Blocchi la direzione da cui vieni. I 4vif si riferiscono a questo
f.cocci (650 points)
1 13 17
by (650 points)
Purtroppo continua a non essermi ancora chiaro come dovrebbe funzionare questa 4if, chiedo venia.