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

aiuto come svolgere hw6

s
simone.lioy (1420 points)
23 30 39
in HW6 obbligatorio by (1.4k points)
qualcuno può darmi dei consigli su come svolgere l'esercizio? io ora ho trovato il primo pixel verde e quindi so che quello è il punto di partenza però non so come procedere

6 Answers

AndreaGasparini (18730 points)
6 12 118
by (18.7k points)
edited by

Oltre a trovare il primo pixel verde, come prima cosa, ti consiglio anche di ricavarti la lunghezza del segmento rosso, così da poter effettuare più efficientemente le operazioni che verranno a seguire (Potrai scorrere la matrice di pixel verde in pixel verde, saltando tutto ciò che c'è nel mezzo).

Dopodiché le operazioni che dovrai svolgere saranno solamente quelle di controllo sull'esistenza di quadrati di lato k segmenti all'interno della griglia a partire dai pixel verdi. Per poter infine restituire il numero dei quadrati trovati.

In ogni caso ti suggerisco di leggere le risposte date agli altri post sull'argomento, raggruppati nella categoria dell'homework. Son state già spiegate molte ottimizzazioni possibili oltre ai modi di approcciare il problema.

s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
conosco la grandezza della griglia ma come faccio a fermarmi da un punto verde ad un altro cosi riesco a capire la lunghezza del segmento
Kobrax (3020 points)
6 18 27
by (3.0k points)
Hai due modi:

1) Se usi due for quando cerchi il primo punto verde, invece di fermarti appena lo trovi puoi continuare con i cicli finché non ne trovi un secondo, e a quel punto puoi anche fermarti. Di conseguenza, avendo le coordinate di entrambi, puoi calcolarti la distanza tra essi.

2) Trovato il primo punto, con un while puoi scorrere sempre sulla stessa riga su cui si trova il primo, finché non trovi un altro punto verde di cui puoi salvarti le coordinate. Analogamente a prima, puoi quindi trovarti la distanza.
AndreaGasparini (18730 points)
6 12 118
by (18.7k points)
Dopo aver trovato il primo punto verde ti basta continuare a scorrere la matrice finché non ne trovi un secondo sulla stessa riga (o colonna), a quel punto la differenza fra le coordinate delle righe (o delle colonne in base a come hai fatto lo scorrimento) sarà la lunghezza del tuo segmento rosso.
s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
perfetto grazie
c
chiarag (10160 points)
3 5 13
by (10.2k points)
Ricordati che all'interno dell'immagine c'è una griglia, quindi è costituita da quattro pixel verdi che costituiscono i vertici. Il primo pixel verde che hai trovato tu quindi rappresenta uno di questi, ti consiglio di trovare almeno un altro vertice per scorrere la griglia senza fare controlli inutili sull'immagine restante che ha soltanto pixel neri :)  Tu inoltre hai a disposizione la lunghezza k che rappresenta quanti "salti" da pixel verde in pixel verde ti servono per creare uno dei lati del quadrato che vai a cercare, e ti consiglio di iterare sulla griglia anche tenendo in considerazione questo parametro.
s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
mi sono trovato il primo pixel verde e l'ultimo pixel verde che sarebbe quello in basso a destra cosi so dove finisce la griglia, ora mi serve scoprire quanto è lungo il segmento rosso
Andrea Sanchietti (3100 points)
4 7 40
by (3.1k points)
il segmento rosso è uguale alla distanza tra due punti verdi, quindi ti basta trovare il primo e il secondo punto verde (puoi fare tutto nello stesso for in cui hai trovato il primo punto verde) per poi fare una semplice sottrazione.
Andrea Sanchietti (3100 points)
4 7 40
by (3.1k points)
ti consiglio adesso di trovare la distanza tra due pixel verdi e dopo la grandezza totale della griglia

Dopo questi due passaggi potrai iniziare a lavorare sulla ricerca dei quadrati
s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
la griglia ormai la conosco perchè so l'ultimo pixel verde quindi so l'ultima colonna che contiene il pixel verde, sto avendo un di difficoltà nel trovare la lunghezza del segmento
Andrea Sanchietti (3100 points)
4 7 40
by (3.1k points)
ti ho risposto sotto l'altro commento
plm (18850 points)
7 15 118
by (18.9k points)
Io ti consiglio di trovare il primo pixel e il secondo o altrimenti di scorrerti tutto il file e trovarti tutte le coordinate dells griglia.
Con due pixel puoi ricavarti la lunghezza del segmento ovvero se x2 fosse (10,2) e x1 fosse (8,2), il segmento sarebbe lungo 2 ovvero x2-x1. Da qui hai praticamente tutto quello che ti serve per fare tutti j controlli
s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
si si fatto gia da tempo, sto pensando a come trovare i quadrati
J
Jan Rogala (7260 points)
3 4 37
by (7.3k points)
Trovato il primo pixel io ti consiglierei di vedere se cio è un angolo o meno, decidi tu quale ti è piu comodo, controllando se i successivi pixel sono verdi. Se lo è ti scorri l'immagine fino al prossimo pixel verde e anche li ti chiedi se il successivo sia un pixel rosso, cio lo continui a fare finche non arrivi alla distanza k, vedrai poi tu come fare(implementandolo nel for o mettendo un contatore). Questo ragionamento lo ripeti per tutti i lati, e, se arrivi alla fine avendo passato tutti i controlli aumenti una variabile che ti fa da contatore per i quadrati trovati
s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
io adesso sono arrivato al punto che so tutte le posizioni in base alle righe dei punti verdi se sono seguiti da segmenti rossi
Tommaso Sgroi (12990 points)
7 11 91
by (13.0k points)

Per procedere dal punto in cui sei arrivato ti dovresti trovare la distanza tra un punto verde e un altro per poi trovare l'ultimo pixel verde in alto a dx e poi in basso a dx.

Sfrutta la distanza tra i pixel verdi che hai trovato e poniti la domanda, in quali condizioni so che la griglia dei pixel verdi finisce? Così ti salvi le coordinate degli unici 2 pixel verdi di cui ti interessano le coordinate (quello in alto a sx, e in basso a dx).

In ogni caso penso che questo consiglio ti possa tornare utile:

Se abbiamo la nostra griglia dove V R N sono pixel rispettivamente verdi, rossi e neri

V R V R V R V N

R N R N R N R N

V R V R V N V N

R N R N R N R N

V R V R V R V N

R N R N R N R N

V R V R V R V N

R N R N R N R N

V R V R V R V N

e cerchiamo tutti i quadrati di lunghezza 2, allora non dovremmo controllare questi settori per vedere se formano quadrati.

Perché a prescindere non potranno mai formare quadrati di lunghezza = 2, limitando così l'iterazione a un gruppo più ristretto di pixel.

                         |  |  |  |

         V R V R |V R V N

         R N R N |R N R N

         V R V R |V N V N

         R N R N |R N R N

         V R V R |V R V N

         R N R N |R N R N

       ________|_______

     -->V R V R |V R V N

     -->R N R N |R N R N

     -->V R V R |V R V N

s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
nulla non riesco, sono riuscito a trovare tutti i punti verde preceduti da segmenti rossi, ma quando devo scendere per controllare il mi sballa tutto