1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
| Dim dbs As Database
Dim ch As String
Dim ro As Integer
Private Sub Command1_Click()
'-------------------------------calcul du temps d'exécution----------------------
Command1.Caption = "calcul de couverture en cours...."
Dim Debut As Long, Fin As Long
Debut = GetTickCount()
'--------------------------------------------------------------------------------
On Error Resume Next
'-----------------------------------------déclaration des variables----------------------------------
Dim rs As Recordset
Dim puiss, p0 As Double
Dim pos As Integer
puiss = 0
p0 = 0
ro = 1
'------------------------------------------ouverture de la base---------------------------------------
Set dbs = OpenDatabase(ch)
recepteur.Refresh
'-------------------------------------------choix du recepteur----------------------------------------
With recepteur.Recordset
.MoveFirst
Do Until .EOF
dbs.Execute "delete * from niveau"
dbs.Execute "delete * from recepteurtmp"
dbs.Execute "insert into recepteurtmp (xs,ys,zs)values('" + CStr(recepteur.Recordset!x) + "','" + CStr(recepteur.Recordset!y) + "','" + CStr(recepteur.Recordset!z) + "')"
' '-----------------------------------------choix de l'angle----------------------------------------------
'
With phi.Recordset
.MoveFirst
Do Until .EOF
With teta.Recordset
.MoveFirst
Do Until .EOF
puiss = 0
dbs.Execute "delete * from sourcetmp" 'table de travail
dbs.Execute "delete * from sourcetmp2" 'table de stockage
'le premier rayon est constitué à partir de la source d'origine et les cordonnées à partir des angles teta et phi
dbs.Execute "delete * from tetatmp"
dbs.Execute "delete * from phitmp"
dbs.Execute "insert into tetatmp values('" + CStr(teta.Recordset!teta) + "')"
dbs.Execute "insert into phitmp values('" + CStr(phi.Recordset!phi) + "')"
dbs.Execute "insert into sourcetmp(xs,ys,zs,xi,yi,zi,puiss) values('0','0','0','" + CStr(source.Recordset!xs) + "','" + CStr(source.Recordset!ys) + "','" + CStr(source.Recordset!zs) + "','0')"
sourcetmp.Refresh
angle1.Refresh
dbs.Execute "delete * from sourcetmp2" 'table de stockage
dbs.Execute "update sourcetmp set sourcetmp.xs='" + CStr(angle1.Recordset!uix) + "' ,sourcetmp.ys= '" + CStr(angle1.Recordset!uiy) + "' ,sourcetmp.zs='" + CStr(angle1.Recordset!uiz) + "',sourcetmp.xi='" + CStr(source.Recordset!xs) + "',sourcetmp.yi='" + CStr(source.Recordset!ys) + "',sourcetmp.zi='" + CStr(source.Recordset!zs) + "',sourcetmp.puiss='" + CStr(angle1.Recordset!pray) + "'"
dbs.Execute "insert into sourcetmp2(index,xs,ys,zs,xi,yi,zi,puiss) values('1','" + CStr(angle1.Recordset!uix) + "','" + CStr(angle1.Recordset!uiy) + "','" + CStr(angle1.Recordset!uiz) + "','" + CStr(source.Recordset!xs) + "','" + CStr(source.Recordset!ys) + "','" + CStr(source.Recordset!zs) + "','" + CStr(angle1.Recordset!pray) + "')"
sourcetmp.Refresh
sourcetmp2.Refresh
'---------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------------------------------
If angle1.Recordset!delta > 0 Then
'il faut comparer la distance entre le mur le plus proche et celle du rayon directe
'**********************************************************************************
'**********************************************************************************
dbs.Execute "delete * from tsm3"
dbs.Execute "insert into tsm3 select * from sm3 "
sm4.Refresh
If angle1.Recordset!d < sm4.Recordset!d Then
'******************************************************************
'calcul de puissance
Set rs = dbs.OpenRecordset("select puiss from sourcetmp")
p0 = rs!puiss
Set rs = Nothing
puiss = (p0 * ro) / (angle1.Recordset!d ^ 2)
'******************************************************************
'le reccepteur est plus proche que le mur donc visibilité directe
dbs.Execute "insert into niveau values('" + CStr(recepteur.Recordset!x) + "','" + CStr(recepteur.Recordset!y) + "','" + CStr(recepteur.Recordset!z) + "','" + CStr(puiss) + "')"
puiss = 0
GoTo fin1
End If
'************************************************************************************
'************************************************************************************
Else
arbre:
puiss = 0
If sourcetmp2.Recordset!Index > 1 Then
angle2.Refresh
If angle2.Recordset!delta > 0 Then
dbs.Execute "delete * from tsm3"
dbs.Execute "insert into tsm3 select * from sm3 "
If angle2.Recordset!d < sm4.Recordset!d Then
Set rs = dbs.OpenRecordset("select puiss from sourcetmp")
p0 = rs!puiss
Set rs = Nothing
puiss = (p0 * ro) / (angle2.Recordset!d ^ 2)
dbs.Execute "insert into niveau values('" + CStr(recepteur.Recordset!x) + "','" + CStr(recepteur.Recordset!y) + "','" + CStr(recepteur.Recordset!z) + "','" + CStr(puiss) + "')"
puiss = 0
GoTo fin2
End If
End If
End If
'le mur est plus proche que le recepteur donc pas de visibilité directe
dbs.Execute "delete * from tsm3"
dbs.Execute "insert into tsm3 select * from sm3 "
sm4.Refresh
dbs.Execute "delete * from tsm5"
dbs.Execute "insert into tsm5 (scaluin,x,y,z,nx,ny,nz,d,xi,yi,zi) select scaluin,x,y,z,nx,ny,nz,d,xi,yi,zi from sm5 "
sm6.Refresh
'******************************************************************
'calcul de puissance
If sourcetmp2.Recordset!Index = 1 Then
sm4.Refresh
sm6.Refresh
sm8.Refresh
puiss = (sourcetmp2.Recordset!puiss * ro) / (sm8.Recordset!d ^ 2)
Else
sm8.Refresh
Set rs = dbs.OpenRecordset("select puiss from sourcetmp2 where index= " + CStr(Int(Val(Replace(sourcetmp2.Recordset!Index / 2, ".", ",")))))
p0 = rs!puiss
Set rs = Nothing
puiss = (p0 * ro) / (sm8.Recordset!d ^ 2)
End If
'******************************************************************
pos = sourcetmp2.Recordset!Index
'*************************calcul du rayon reflechie et rayon transmis**********
'******************************************************************************
If pos < 4 Then
sm4.Refresh
sm6.Refresh
sm8.Refresh
With sourcetmp2.Recordset
.AddNew
!Index = sourcetmp2.Recordset.RecordCount + 1
!xs = sm8.Recordset!urx
!ys = sm8.Recordset!ury
!zs = sm8.Recordset!urz
!xi = sm8.Recordset!xi
!yi = sm8.Recordset!yi
!zi = sm8.Recordset!zi
!puiss = puiss
.Update
End With
With sourcetmp2.Recordset
.AddNew
!Index = sourcetmp2.Recordset.RecordCount + 1
!xs = sm8.Recordset!utx
!ys = sm8.Recordset!uty
!zs = sm8.Recordset!utz
!xi = sm8.Recordset!xi
!yi = sm8.Recordset!yi
!zi = sm8.Recordset!zi
!puiss = puiss
.Update
End With
With sourcetmp2.Recordset
.MoveFirst
.FindFirst ("index=" + CStr(pos)) 'retrouver la position du recordset
End With
End If
'*********************************************************************************
'*********************************************************************************
fin2:
If pos < 7 Then
sourcetmp2.Recordset.MoveFirst
sourcetmp2.Recordset.FindFirst ("index=" + CStr(pos)) 'retrouver la position du recordset
sourcetmp2.Recordset.MoveNext
dbs.Execute "delete * from sourcetmp"
With sourcetmp.Recordset
.AddNew
!xs = sourcetmp2.Recordset!xs
!ys = sourcetmp2.Recordset!ys
!zs = sourcetmp2.Recordset!zs
!xi = sourcetmp2.Recordset!xi
!yi = sourcetmp2.Recordset!yi
!zi = sourcetmp2.Recordset!zi
!puiss = sourcetmp2.Recordset!puiss
.Update
End With
GoTo arbre
End If
End If
fin1:
' '---------------------------------------------------------------------------------------------------------
' '---------------------------------------------------------------------------------------------------------
teta.Recordset.MoveNext
Loop
End With 'teta
phi.Recordset.MoveNext
Loop
End With 'phi
'---------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------
dbs.Execute "insert into niveau values('" + CStr(recepteur.Recordset!x) + "','" + CStr(recepteur.Recordset!y) + "','" + CStr(recepteur.Recordset!z) + "','" + CStr(0) + "')"
dbs.Execute "insert into db2 select * from db1"
.MoveNext 'choix du recpteur suivant
Loop 'recepteur
End With 'recepteur
'--------------------------------------cloture de la base------------------------
dbs.Close
'---------------------------------fin de l'exécution------------------------------
Command1.Caption = "Lancer le calcul de couverture"
Fin = GetTickCount()
MsgBox "le calcul de couverture est achevé ,Temps mis en millisecondes : " & Fin - Debut
End Sub
Private Sub Form_Load()
ch = App.Path + "/base.mdb"
End Sub |
Partager