Algoritmo per il rilevamento di finestre in una stanza

1

Ho a che fare con il seguente problema e stavo cercando di scrivere uno pseudo-codice per sviluppare un algoritmo che può essere generico per un tale problema.

Ecco cosa ho scoperto fino ad ora.

PASSO 1

In questo passaggio cerco di ottenere il robot dove potrebbe essere collocato nell'angolo in alto a sinistra.

Turn Left -> If no window or Wall detected keep going forward 1 unit..

if window or wall detected ->Turn right --> if no window or Wall detected keep going forward..

if window or wall detected then top left corner is reached.

PASSO 2 (Iniziamo a contare le finestre dopo che siamo arrivati a questo punto per evitare errori di conteggio)

Vorrei dichiarare una variabile chiamata turni in quanto mi aiuterà a tenere traccia del fatto che il robot abbia aggirato l'intera stanza.

Turns = 4;

Ora siamo rivolti a nord e posizionati nell'angolo in alto a sinistra.

while(turns>0){

If window or wall detected (if window count++) 

Turn Right

Turn--;

While(detection!=wall || detection!=window){

move 1 unit forward

Turn left (if window count++)

Turn right

}


}

Credo che in questo modo il robot girerà per l'intera stanza e conterebbe le finestre e si fermerà una volta che avrà girato l'intera stanza mentre le virate diminuiscono. Non ritengo che questa sia la soluzione migliore e apprezzerei i suggerimenti su come posso migliorare il mio Pseudo-codice. Non sto cercando alcun codice solo un algoritmo per risolvere un problema del genere ed è per questo che non l'ho postato nello stack overflow. Mi scuso se il mio Pseudo-codice è scritto male, per favore, fai dei suggerimenti se riesco a migliorarlo come sono nuovo in questo. Grazie.

    
posta user2733436 27.05.2014 - 02:08
fonte

1 risposta

3

Devi trovare l'angolo in alto a sinistra. Invece, vai avanti (indipendentemente dall'orientamento attuale del robot) finché non colpisci il muro, poi gira a destra. Questi sono i passaggi 1 e 2 nella figura sotto. Al passaggio 2, il robot gira a destra, orientandosi verso l'alto.

La seconda fase è quella di andare avanti, girando costantemente a sinistra per vedere se sei vicino a un muro o a una finestra. Ad esempio, al punto 6, il robot si girerà per essere orientato a sinistra, vedere che è un muro e tornare indietro per essere in grado di spostarsi verso l'alto. Al punto 7, il robot gira a sinistra, vede che è vicino a un muro e ora può girare a destra due volte, poiché sa che c'è anche un muro in cima. Esegue un'operazione simile ai punti 16, 23 e 32.

Al punto 9, registra che è vicino a una finestra. Al punto 10, sa che in precedenza aveva una finestra in cima, quindi non c'è bisogno di contare una diversa finestra.

L'approccio suppone che:

  • La stanza è rettangolare. Avere una stanza non rettangolare richiederebbe un approccio leggermente più complicato.

  • Non ci sono muri o finestre all'interno della stanza stessa, cioè nel mezzo della stanza. Avere muri o finestre all'interno di una stanza richiederebbe un approccio troppo complesso in cui il robot dovrebbe eseguire la scansione di quasi tutta la superficie.

  • Il robot sa di aver già visitato una determinata cella. Se non lo sa, dovrebbe essere almeno in grado di conoscere le dimensioni della stanza.

L'algoritmo può essere ulteriormente migliorato, ad esempio gestendo il caso in cui il robot tocca il muro nella sua posizione iniziale, ma suppongo che tali ottimizzazioni non rientrino nello scopo dell'esercizio.

    
risposta data 27.05.2014 - 02:12
fonte

Leggi altre domande sui tag