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 ...
'Resituisce il massimo tra i valori di una matrice Function max(ByVal matrice As Array) As Integer Dim i, j, m As Integer m = matrice(0, 0) 'Inizializza il valore massimo con il valore del primo elemento For i = 0 To matrice.GetUpperBound(0) 'Le funzioni GetUpperBound rendono la funzione applicabile a tutte le matrici bidimensionali For j = 0 To matrice.GetUpperBound(1) If matrice(i, j) > m Then m = matrice(i, j) 'Se il valore è maggiore del massimo precedente viene salvato come nuovo massimo Next Next Return m 'Resituisce il valore massimo End Function 'Utilizza il metodo bouble sort per odinare una lista bidimensionale secondo i vaklori della seconda riga conservando le loro corrispondenze con i valori della prima riga Function SortList( ByRef ListaDir As Array) Dim Change As Boolean = True 'Inizializza l'indice di avvenuto cambiamento Dim Indice, TempSomma, TempDir As Integer Do While Change 'Itera finché ci sono scambi tra elementi Change = False For Indice = 1 To ListaDir.Length / 2 - 1 'Esegue il controlo su tutti gli elementi della seconda riga lista If ListaDir(1, Indice - 1) < ListaDir(1, Indice) Then 'Se un valore della seconda riga è maggiore del precedente li scambia e scambia anche quelli corrispondentti sulla prim riga TempDir = ListaDir(0, Indice - 1) 'Si usano delle variabili temporaee TempSomma = ListaDir(1, Indice - 1) ListaDir(0, Indice - 1) = ListaDir(0, Indice) ListaDir(1, Indice - 1) = ListaDir(1, Indice) ListaDir(0, Indice) = TempDir ListaDir(1, Indice) = TempSomma Change = True 'L'indice di avvenuto cambiamento è impostato su Vero End If Next Loop End Function 'Applica la Regola 1 Function Reg1() As Array Dim DirMat(1, 3) As Integer 'Inizializza la lista con le direzioni e i pesi del quadrato adiacente corrispondente 'Dim ListaDir As Array DirMat(0, 0) = 0 DirMat(0, 1) = 1 DirMat(0, 2) = 2 DirMat(0, 3) = 3 DirMat(1, 0) = Nord() 'Nella direzione Nord mette il valore del quadrato a Nord 155
DirMat(1, 1) = Sud() 'Nella direzione Nord mette il valore del quadrato a Sud DirMat(1, 2) = Ovest() 'Nella direzione Nord mette il valore del quadrato a Ovest DirMat(1, 3) = Est() 'Nella direzione Nord mette il valore del quadrato a Est Return BestOf(DirMat) 'Resituisc la lista con solo le direzioni con peso maggiore End Function 'Indirizza il robot verso il punto non verificato più vicino Function Reg5() As Byte Dim i, j, DistH, DistV, DistMin As Integer Dim Direzione, DirScelta As Byte Dim ListaDir(1, 0) As Integer Dim DistLinMin As Integer DistMin = r + c 'Inizializza la distanza minima con i lmassimo valore che essa può assumere DistLinMin = 0 For i = 0 To r 'Controlla tutti i punti su tutte le righe... For j = 0 To c '... e le colonne If MatriceCampo(i, j) > 0 Then 'Se il punto in questione deve essere ancora controllato Dim DimListaDir As Integer = -1 'Inizializza la dimensione minima della lista dei punti ammissibili ponendone la dimensione a -1 perché essa andrà comunque incrementata ReDim ListaDir(1, 0) 'Ridimensioa la lista delle direzioni DistV = i - Ratt 'Calcola la distanza in verticale DistH = j - Catt 'Calcola la distanza in orizzontale If Math.Abs(DistH) + Math.Abs(DistV) = 0 And DistV > 0 Then 'Se il punto è a Sud... DimListaDir += 1 'Incrementa la dimensione della lista delle direzioni da seguire ReDim Preserve ListaDir(1, DimListaDir) 'Ridimensiona la lista delle direzioni preservandone gli elementi ListaDir(0, 0) = 1 'Inserisce la direzione ListaDir(1, 0) = DistV 'Inserisce la distanza nella direzione corrispondente End If If Ovest() >= 0 And DistH < 0 Then 'Se il punto è a Ovest... DimListaDir += 1 'Incrementa la dimensione della lista delle direzioni da seguire ReDim Preserve ListaDir(1, DimListaDir) 'Ridimensiona la lista delle direzioni preservandone gli elementi ListaDir(0, 0) = 2 'Inserisce la direzione ListaDir(1, 0) = -DistH 'Inserisce la distanza nella direzione corrispondente End If 156
- 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 164 and 165: 'Controlla che il punto di partenza
- Page 166 and 167: Loop While max(MatriceCampo) > 0 'I
- Page 168 and 169: Else Return 4 '...altrimenti restit
- 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
DirMat(1, 1) = Sud() 'Nella <strong>di</strong>rezione Nord mette il valore del quadrato a Sud<br />
DirMat(1, 2) = Ovest() 'Nella <strong>di</strong>rezione Nord mette il valore del quadrato a Ovest<br />
DirMat(1, 3) = Est() 'Nella <strong>di</strong>rezione Nord mette il valore del quadrato a Est<br />
Return BestOf(DirMat) 'Resituisc la lista con solo le <strong>di</strong>rezioni con peso maggiore<br />
End Function<br />
'In<strong>di</strong>rizza il robot verso il punto non verificato più vicino<br />
Function Reg5() As Byte<br />
Dim i, j, DistH, DistV, DistMin As Integer<br />
Dim Direzione, DirScelta As Byte<br />
Dim ListaDir(1, 0) As Integer<br />
Dim DistLinMin As Integer<br />
DistMin = r + c 'Inizializza la <strong>di</strong>stanza minima con i lmassimo valore che essa può assumere<br />
DistLinMin = 0<br />
For i = 0 To r 'Controlla tutti i punti su tutte le righe...<br />
For j = 0 To c '... e le colonne<br />
If MatriceCampo(i, j) > 0 Then 'Se il punto in questione deve essere ancora controllato<br />
Dim DimListaDir As Integer = -1 'Inizializza la <strong>di</strong>mensione minima <strong>della</strong> lista dei punti<br />
ammissibili ponendone la <strong>di</strong>mensione a -1 perché essa andrà comunque incrementata<br />
ReDim ListaDir(1, 0) 'Ri<strong>di</strong>mensioa la lista delle <strong>di</strong>rezioni<br />
DistV = i - Ratt 'Calcola la <strong>di</strong>stanza in verticale<br />
DistH = j - Catt 'Calcola la <strong>di</strong>stanza in orizzontale<br />
If Math.Abs(DistH) + Math.Abs(DistV) = 0 And DistV > 0 Then 'Se il punto è a Sud...<br />
DimListaDir += 1 'Incrementa la <strong>di</strong>mensione <strong>della</strong> lista delle <strong>di</strong>rezioni da seguire<br />
ReDim Preserve ListaDir(1, DimListaDir) 'Ri<strong>di</strong>mensiona la lista delle <strong>di</strong>rezioni<br />
preservandone gli elementi<br />
ListaDir(0, 0) = 1 'Inserisce la <strong>di</strong>rezione<br />
ListaDir(1, 0) = DistV 'Inserisce la <strong>di</strong>stanza nella <strong>di</strong>rezione corrispondente<br />
End If<br />
If Ovest() >= 0 And DistH < 0 Then 'Se il punto è a Ovest...<br />
DimListaDir += 1 'Incrementa la <strong>di</strong>mensione <strong>della</strong> lista delle <strong>di</strong>rezioni da seguire<br />
ReDim Preserve ListaDir(1, DimListaDir) 'Ri<strong>di</strong>mensiona la lista delle <strong>di</strong>rezioni<br />
preservandone gli elementi<br />
ListaDir(0, 0) = 2 'Inserisce la <strong>di</strong>rezione<br />
ListaDir(1, 0) = -DistH 'Inserisce la <strong>di</strong>stanza nella <strong>di</strong>rezione corrispondente<br />
End If<br />
156