2 Taglio della vegetazione - Intro Page - Università degli Studi di ...
2 Taglio della vegetazione - Intro Page - Università degli Studi di ... 2 Taglio della vegetazione - Intro Page - Università degli Studi di ...
'Controlla che il punto di partenza scelto non sia circondato da valori negativi del campo, non sia cioè un punto morto. If ListaDirezioni(1, 0) < 0 Then PuntoBuono = False Exit Do End If If ListaDirezioni.Length > 2 Or ListaDirezioni(1, 0) = 0 Then 'Elabora le regole successive solo nel caso di ambiguità, se cioè non c'è una scelta univoca da parte della Regola 1 'Regola2: Siccome per il motocoltivatore è gravoso cambiare direzione, in caso di indecisio ne il robot prova a procedere dritto Pres = Cerca(ListaDirezioni, OldDir) 'Cerca nella lista delle direzioni ammissibile quella che sta già percorrendo If Pres 2 Or ListaDirezioni(1, 0) = 0 Then 'Nel caso ci siano due direzioni ugualmente buone 'Regola4: Si dirige nel semipiano la cui soma dei valori ha valore maggiore SumSem(ListaDirezioni) 'Calcola la somma dei semipiani rispetto alla posizione attuale ListaDirezioni = BestOf(ListaDirezioni) 'Sceglie la direzione (o le direzioni, in caso di ambiguità) migliori If ListaDirezioni.Length > 2 Then 'Nel caso sussista ancora un'ambiguità... 'Regola 5: l robot si dirige verso il punto non controllato (>0) più vicino alla sua posizione NewDir = Reg5() 'N.B. In caso di due distanze uguali prende semplicemente la prima Else NewDir = ListaDirezioni(0, 0) 'Aggiorna la direzione secondo la Regola 4 End If Else NewDir = ListaDirezioni(0, 0) 'Aggiorna la direzione secondo la Regola 3 End If Else NewDir = OldDir 'Aggiorna la direzione secondo la Regola 2 End If Else NewDir = ListaDirezioni(0, 0) 'Aggiorna la dirzione secondo la Regola 1 End If 149
'Se è in circolo vizioso esce in modo casuale If NewDir = Old2Dir And IsOpposit(OldDir, NewDir) Then 'Nel caso la nuova direzione sia opposta alla vecchia e uguale a quella di due step prima (il robot va avanti e indietro in circolo vizioso)... NewDir = Casual() 'Sceglie una direzione casuale per uscire dal circolo vizioso End If If NewDir OldDir Then Curve += 1 'Se il valore della direzione è cambiato incrementa il contatore delle curve Old2Dir = OldDir 'Aggiorna il valore della direzione di due step precedenti OldDir = NewDir 'Aggiorna il valore della direzione precedente Draw(Me) 'Disegna la form 'Aggiorna la posizione Select Case NewDir Case 0 'Il Robot è andato verso Nord Ratt -= 1 'Decremente l'indice di riga Case 1 'Il Robot è andato verso Sud Ratt += 1 'Incrementa l'indice di riga Case 2 'Il Robot è andato verso Ovest Catt -= 1 'Decrementa l'indice di colonna Case 3 'Il Robot è andato verso Est Catt += 1 'Incrementa l'indice di colonna End Select MatriceCampo(Ratt, Catt) = 0 'Segna come controllato il quadrato su cui si trova il robot Spostamenti += 1 'Incrementa l'indice degli spostamenti Campo.FillRectangle(Quad_Actual, 8 + 5 * Catt, 32 + 5 * Ratt, 5, 5) 'Disegna il quadrato su cui si trova il robot al momento 'Blocco "perditempo" che tiene conto dei tempi di aggiornamento dell'immagine If r * c < 1000 Then 'Interviene solo per MatriciCampo piccole (meno di 1000 elementi) For Time = 0 To 10000000 Math.Sqrt(Time) 'Esegue un calcolo ozioso Next End If 'Aggiornamento dei dati significativi Application.DoEvents() 'Porta la Form in primo piano e la attiva in modo da poterne schiacciare i bottoni Me.lblMovements.Text = CStr(Spostamenti) 'Aggiorna il valore della casella di testo che visualizza gli spostamenti Me.lblRotations.Text = CStr(Curve) 'Aggiorna il valore della casella di testo che visualizza le curve Me.lblTime.Text = CStr(Math.Round(Curve * TCurva + Spostamenti / Velocità)) 'Aggiorna il valore del tempo in base a velocità, spostamenti e curve 150
- Page 113 and 114: Si procede quindi al calcolo di VS
- Page 115 and 116: Particolare della deformazione: Si
- Page 117 and 118: Particolare della deformazione: Anc
- Page 119 and 120: Particolare delle deformazione: La
- Page 121 and 122: Vettori della deformazione: Come pr
- Page 123 and 124: Il foro è praticato in modo da cre
- Page 125 and 126: Anche in questo caso si ha un telai
- Page 127 and 128: Nella figura a sinistra è riportat
- Page 129 and 130: 9.4 Manutenzione Le regole di manut
- Page 131 and 132: 10 Simulatore del sistema di naviga
- Page 133 and 134: utente ad ogni porzione sulla base
- Page 135 and 136: Si veda l’esempio in figura: Si a
- Page 137 and 138: Il campo minato viene caricato. Le
- Page 139 and 140: Tale tendenza è particolarmente ev
- Page 141 and 142: 11.1 Conclusioni 11 Conclusioni e s
- Page 143 and 144: Sono state infine condotte varie an
- Page 145 and 146: Una volta stabiliti dei parametri u
- Page 147 and 148: “Technology and the Landmine Prob
- Page 149 and 150: 14 Produttori consultati http://www
- Page 151 and 152: www.fluidmec.it, Fluidmec S.p.A, Co
- Page 153: APPENDICE A Disegni costruttivi
- Page 158 and 159: Public Class Form1 Inherits System.
- Page 160 and 161: 'Label1 ' Me.Label1.Location = New
- Page 162 and 163: Try 'Prova ad aprire ma tiene conto
- Page 166 and 167: Loop While max(MatriceCampo) > 0 'I
- Page 168 and 169: Else Return 4 '...altrimenti restit
- Page 170 and 171: 'Resituisce il massimo tra i valori
- Page 172 and 173: If Est() >= 0 And DistH > 0 Then 'S
- Page 174 and 175: Next Next End Select ListaDirezioni
- Page 176: Public Module PublicVar Public Matr
'Controlla che il punto <strong>di</strong> partenza scelto non sia circondato da valori negativi del<br />
campo, non sia cioè un punto morto.<br />
If ListaDirezioni(1, 0) < 0 Then<br />
PuntoBuono = False<br />
Exit Do<br />
End If<br />
If ListaDirezioni.Length > 2 Or ListaDirezioni(1, 0) = 0 Then 'Elabora le regole<br />
successive solo nel caso <strong>di</strong> ambiguità, se cioè non c'è una scelta univoca da parte <strong>della</strong> Regola 1<br />
'Regola2: Siccome per il motocoltivatore è gravoso cambiare <strong>di</strong>rezione, in caso <strong>di</strong><br />
indecisio ne il robot prova a procedere dritto<br />
Pres = Cerca(ListaDirezioni, OldDir) 'Cerca nella lista delle <strong>di</strong>rezioni ammissibile<br />
quella che sta già percorrendo<br />
If Pres 2 Or ListaDirezioni(1, 0) = 0 Then 'Nel caso ci siano<br />
due <strong>di</strong>rezioni ugualmente buone<br />
'Regola4: Si <strong>di</strong>rige nel semipiano la cui soma dei valori ha valore maggiore<br />
SumSem(ListaDirezioni) 'Calcola la somma dei semipiani rispetto alla posizione<br />
attuale<br />
ListaDirezioni = BestOf(ListaDirezioni) 'Sceglie la <strong>di</strong>rezione (o le <strong>di</strong>rezioni, in<br />
caso <strong>di</strong> ambiguità) migliori<br />
If ListaDirezioni.Length > 2 Then 'Nel caso sussista ancora un'ambiguità...<br />
'Regola 5: l robot si <strong>di</strong>rige verso il punto non controllato (>0) più vicino alla<br />
sua posizione<br />
NewDir = Reg5() 'N.B. In caso <strong>di</strong> due <strong>di</strong>stanze uguali prende semplicemente<br />
la prima<br />
Else<br />
NewDir = ListaDirezioni(0, 0) 'Aggiorna la <strong>di</strong>rezione secondo la Regola 4<br />
End If<br />
Else<br />
NewDir = ListaDirezioni(0, 0) 'Aggiorna la <strong>di</strong>rezione secondo la Regola 3<br />
End If<br />
Else<br />
NewDir = OldDir 'Aggiorna la <strong>di</strong>rezione secondo la Regola 2<br />
End If<br />
Else<br />
NewDir = ListaDirezioni(0, 0) 'Aggiorna la <strong>di</strong>rzione secondo la Regola 1<br />
End If<br />
149