290 likes | 423 Views
Kartowanie pikiet. pomierzonych metodą ortogonalną. Dane zapisujemy do plików tekstowych: osnxy.txt 1001 1000.00 1000.00 1002 1040.00 1000.00. pomort.txt (numer pikiety odcięta rzędna – z minusem w lewo, z plusem w prawo) 1 1.98 9.02 2 3.04 5.96 3 5.99 6.98 4 7.02 4.01
E N D
Kartowanie pikiet pomierzonych metodą ortogonalną
Dane zapisujemy do plików tekstowych: osnxy.txt 1001 1000.00 1000.00 1002 1040.00 1000.00 pomort.txt (numer pikiety odcięta rzędna – z minusem w lewo, z plusem w prawo) 1 1.98 9.02 2 3.04 5.96 3 5.99 6.98 4 7.02 4.01 5 9.97 5.03
linie.txt (linie do narysowania od punktu do punktu): 1 2 2 3 3 4 4 5 itd.
Program powinien mieć postać strukturalną – powinien składać się z wielu procedur – im krótsza procedura tym lepiej. Główna część programu MAIN może właściwie w każdym programie wyglądać tak jak niżej: '*********************** MAIN ******************* sub Main dane przetwarzanie wyniki end sub
Na początku programu umieszcza się zmienne Public, które są dostępne w całym programie – zmienne globalne. W procedurach definiuje się zmienne lokalne, które dostępne są wyłącznie w tych procedurach, w których zostały zdefiniowane. Public nro() as integer, xo() as double, yo() as double Public nrp() as integer, xp() as double, yp() as double Public odc() as double, rze() as double Public odp() as integer, dop() as integer Public ios as integer, ipik as integer, ilin as integer
Numery i współrzędne punktów osnowy: nro() as integer, xo() as double, yo() as double Numery i współrzędne pikiet: nrp() as integer, xp() as double, yp() as double Odcięte i rzędne pikiet: odc() as double, rze() as double Numery punktów do połączenia: odp() as integer, dop() as integer Liczba punktów osnowy, pikiet i linii do narysowania: ios as integer, ipik as integer, ilin as integer
Procedury i funkcje w programie muszą być zapisane w takiej kolejności, aby każda procedura lub funkcja była zdefiniowana przed jej pierwszym wywołaniem.
'*********************** DANE***************** sub dane osnowa pikiety linie end sub '*********************** MAIN ******************* sub Main dane przetwarzanie wyniki end sub
'*********************** OSNOWA ************************* sub osnowa dim plik_osn as string dim i as integer plik_osn = MbeInputBox("Podaj nazwę pliku z danymi osnowy", "D:\osnxy.txt", "WCZYTYWANIE DANYCH OSNOWY ") open plik_osn for input as #1 ios=0 whilenot eof(1) ios=ios+1 redim preserve nro(ios) redim preserve xo(ios) redim preserve yo(ios) input #1, nro(ios), xo(ios), yo(ios) wend close #1 end sub
'*********************** PIKIETY ************************* sub pikiety dim plik_pik as string dim i as integer plik_pik = MbeInputBox("Podaj nazwę pliku z wynikami pomiarów", "D:\pomort.txt", "WCZYTYWANIE WYNIKÓW POMIARÓW ") open plik_pik for input as #1 ipik=0 while not eof(1) ipik=ipik+1 redim preserve nrp(ipik) redim preserve odc(ipik) redim preserve rze(ipik) input #1, nrp(ipik),odc(ipik),rze(ipik) wend close #1 end sub
'*********************** LINIE ************************* sub linie dim plik_lin as string dim i as integer plik_lin = MbeInputBox("Podaj nazwę pliku połączeń", "D:\linie.txt", "WCZYTYWANIE PLIKU POŁĄCZEŃ ") open plik_lin for input as #1 ilin=0 while not eof(1) ilin=ilin+1 redim preserve odp(ilin) redim preserve dop(ilin) input #1, odp(ilin),dop(ilin) wend close #1 end sub
'*********************** PRZETWARZANIE ********************* sub przetwarzanie xy_pikiet kartowanie linie end sub
B hi a li P A
'***************************AZYMUT ********************************************** Function Azymut(xa as double, ya as double, xb as double, yb as double) as double Dimdx as double, dy as double, az as double dx=xb-xa: dy=yb-ya if dx=0 then if dy<0 then az=300 if dy>0 then az=100 else az=atn(dy/dx)*200/pi end if if dx<0 then az=az+200 if az<0 then az=az+400 azymut=az end function
'***************************** XY_PIKIET **************************************** sub xy_pikiet Dim xa as double, ya as double, l as double, s as double,cs as double, sn as double Dim az as double Redim xp(ipik): Redim yp(ipik) xa=xo(1):ya=yo(1) az= azymut(xo(1),yo(1),xo(2),yo(2)) for i=1 to ipik l=odc(i):h=rze(i) sn=sin(az/200*pi) cs=cos(az/200*pi) xp(i)=xa+l*cs-h*sn yp(i)=ya+l*sn+h*cs next i end sub
'*********************** KARTOWANIE *********************** sub kartowanie kart_osnowy kart_pikiet end sub
'*********************** KARTOWANIE OSNOWY *********************************** sub kart_osnowy Dim point As MbePoint Dim i as integer for i= 1 to ios MbeSendCommand "PLACE CIRCLE ICON " MbeSendCommand "IGEN CONSTRAIN RADIUS 0.3" point.x = yo(i) point.y = xo(i) MbeSendDataPoint point, 1% MbeSendReset MbeSendCommand "PLACE TEXT" MbeSendCommand cstr(nro(i)) point.x = yo(i) point.y = xo(i) MbeSendDataPoint point, 1% MbeSendReset next i end sub
'*********************** KARTOWANIE PIKIET ************************************ sub kart_pikiet Dim point As MbePoint Dim i as integer for i= 1 to ipik MbeSendCommand "PLACE CIRCLE ICON " MbeSendCommand "IGEN CONSTRAIN RADIUS 0.1" point.x = yp(i) point.y = xp(i) MbeSendDataPoint point, 1% MbeSendReset MbeSendCommand "PLACE TEXT" MbeSendCommand cstr(nrp(i)) point.x = yp(i) point.y = xp(i) MbeSendDataPoint point, 1% MbeSendReset next i end sub
'********************************** RYSOWANIE LINII***************************** sub rys_linie Dim point As MbePoint Dim i1 as integer, i2 as integer for i= 1 to ilin i1=odp(i): i2=dop(i) MbeSendCommand "PLACE SMARTLINE „ point.x = yp(i1) point.y = xp(i1) MbeSendDataPoint point, 1% point.x = yp(i2) point.y = xp(i2) MbeSendDataPoint point, 1% MbeSendReset next i end sub
'************************ WYNIKI - RAPORT **************** sub wyniki raport_plik raport_osnowa raport_pomiary raport_xy close #1 end sub
'*************** RAPORT NAZWA PLIKU ****************************** sub raport_plik() Dim plikr as string ' Pytanie o nazwę pliku raportu plikr=MbeInputBox("Podaj nazwę pliku raportu","D:\raport1.txt","PLIK RAPORTU") Open plikr for Output as #1 end sub
'*************** RAPORT OSNOWA ****************************** sub raport_osnowa() Dim i as integer Print #1, "Dane punkty osnowy" Print #1, "Nr X Y" for i=1 to ios print #1,nro(i), format$(xo(i),"0.00"), format$(yo(i),"0.00") next i Print #1," " end sub
'*************** RAPORT POMIARY ****************************** sub raport_pomiary() Dim i as integer Print #1, "Miary ortogonalne" Print #1, "Nr Odcieta Rzedna" for i=1 to ipik print #1,nrp(i), format$(odc(i),"0.00"), format$(rze(i),"0.00") next i Print #1," " end sub
'*************** RAPORT WSPÓŁRZĘDNE PIKIET ************************* sub raport_xy() Dim i as integer Print #1, "Obliczone współrzędne pikiet" Print #1, "Nr X Y" for i=1 to ipik print #1,nrp(i), format$(xp(i),"0.00"), format$(yp(i),"0.00") next i Print #1," " end sub
Dane punkty osnowy Nr X Y 1001 1000.00 1000.00 1002 1040.00 1040.00 Miary ortogonalne Nr Odcieta Rzedna 1 1.98 9.02 2 3.04 5.96 3 5.99 6.98 4 7.02 4.01 5 9.97 5.03 6 11.03 -5.98 7 11.03 -13.02 8 12.04 8.97 9 13.98 11.95 10 13.98 -5.95 11 13.98 -9.97 12 16.01 12.03 13 16.97 -10.02 14 16.97 -13.01
Obliczone współrzędne pikiet Nr X Y 1 995.04 1007.76 2 997.91 1006.39 3 999.29 1009.19 4 1002.14 1007.79 5 1003.51 1010.59 6 1012.04 1003.56 7 1016.99 998.61 8 1002.15 1014.88 9 1001.40 1018.37 10 1014.13 1005.64 11 1016.96 1002.81 12 1002.84 1019.81 13 1019.07 1004.93 14 1021.19 1002.81 15 1014.16 1014.16 16 1015.52 1015.52 17 1011.33 1021.23 18 1016.95 1019.78