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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 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 2023-24 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.

Es1 hw3 ragionamento

D
Deacoon (9100 points)
11 34 53
in Es1 by (9.1k points)
Io mi sono ricavato una lista di tuple con tutte  le coordinate dei bianchi , secondo voi ora qualè il ragionamento migliore da fare per svolgere l esercizio?
786 views
closed

2 Answers

Best answer
Xriuk (13590 points)
8 24 116
by (13.6k points)
selected by

Trovi i vertici come ha detto @AlessandroPecchini e confronti le coordinate per determinare se è un rettangolo valido:

  • i vertici in alto a sinistra e in alto a destra avranno la stessa Y
  • i vertici in basso a sinistra e in basso a destra avranno la stessa Y
  • i vertici in alto a sinistra e in basso a sinistra avranno la stessa X
  • i vertici in alto a destra e in basso a destra avranno la stessa X
alessioclemente (19640 points)
19 67 153
by (19.6k points)
Per trovare i vertici si fanno quattro funzioni diverse, oppure ho capito male io?
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Io ho intenzione di usarne una ma con 4 cicli, però in questo modo se trovi qualcosa di anomalo puoi fermarti prima di cercarli tutti, almeno questa è l'idea
Xriuk (13590 points)
8 24 116
by (13.6k points)

Diciamo che io ne ho fatte 4 ma 2 sono uguali (per un controllo incrociato), in pratica:

  1. Nella funzione principale trovo un punto bianco (lo prendo come angolo in alto a sinistra)
  2. Da lì controllo se esiste un angolo in alto a destra e uno in basso a sinistra (2 funzioni esterne)
  3. Dal punto in basso a sinistra controllo che esista una corrispondenza nell'angolo in basso a destra (1 funzione esterna)
  4. Controllo anche che dal punto in alto a destra esiste una corrispondenza nell'angolo in basso a destra (1 funzione esterna, serve a controllare che il rettangolo sia effettivamente chiuso)
  5. Confronto tutti i vertici per vedere se corrispondono a un rettangolo
alessioclemente (19640 points)
19 67 153
by (19.6k points)
Quello che non sono riuscito a capire è come trovare per esempio l'angolo in alto a destra se il segmento è continuo, e quindi anche il prossimo punto è bianco
Xriuk (13590 points)
8 24 116
by (13.6k points)

Controlli il punto subito sotto, per vedere se c'è un angolo, immagina i pixel:

 #####################
 ^        # <--- angolo
punto di  #
origine   #

Quando trovi un punto bianco sotto la linea che stai "scorrendo", allora hai trovato un angolo, occhio a controllare che ci sia anche il punto sopra per evitare falsi positivi

 #########  ##########
 ^        # <--- falso angolo,
punto di  #      c'è il punto sotto
origine   #      ma non quello sopra
D
Deacoon (9100 points)
11 34 53
by (9.1k points)
comunque nel modo che dici puoi trovare anche vertici di un rettagolo tagliato
Xriuk (13590 points)
8 24 116
by (13.6k points)
@Deacoon cosa intendi per rettangolo tagliato?

Il controllo che faccio io sui vertici prevede anche di controllare che il bordo sia una linea continua, quindi non ci sono interruzioni/tagli
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Secondo me ti conviene verificare se quel bianco può essere un vertice ad esempio muovendoti da sx a dx hai un vertice superiore sinistro se il pixel sotto e quello di fianco sono bianchi e quello subito sotto a dx (successivo sulla diagonale) è nero
Da lì puoi iniziare a verificare se davanti a te hai un quadrilatero o meno, altrimenti è inutile per ora considerare quel pixel
D
Deacoon (9100 points)
11 34 53
by (9.1k points)
A trovare i vertici gia ci avevo pensato , ma come hai detto te trovi anche semplicemente delle intersezioni tra segmenti , poi come fai a determinare che è un rettangolo
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Io ho ancora solo lo Pseudocodice, devo ancora testarlo, ma l'idea è di scorrere l'eventuale quadrilatero e non appena trovi qualcosa che non quadra torni ad analizzare il pixel successivo al potenziale vertice che hai trovato