Obliczenie ciągów poligonowych otwartych, obustronnie nawiązanych Dane: punkty A i B nawiązania ciągu, kąty a i boki d ciągu wiszącego Zadanie: obliczyd współrzędne punktów ciągu od 1 do n a1 a2 a3 kąty lewe w gradach o========o-------------*-------------*--------*---------o=========o kierunek ciągu A B d1 1 d2 2... n-1 C D A, B, oraz C, D - punkty nawiązania; 1...n punkty wyznaczane Specyfikacja problemu algorytmicznego: Problem algorytmiczny: Wyznaczyd współrzędne punktów ciągu poligonowego dwustronnego Dane wejściowe: 4 punkty nawiązania ciągu wiszącego (numery punktów A, B, C, D liczby całkowite long oraz ich współrzędne liczby rzeczywiste podwójne precyzji). oraz pomierzonych n kątów lewych w gradach i (n-1) długości boków wyznaczających punkty ciągu. Dane wyjściowe: współrzędne punktów wyznaczanych ciągu dwustronnego Algorytm obliczeo przyjęty w programie W programie założono, że są kąty pomierzone lewe w gradach (ilośd n) i dane są współrzędne 4 punktów nawiązania: A, B, C, D jak na rys. wyżej. Wprowadź dane punktów nawiązania: boku początkowego A, B i koocowego C, D numery i współrzędne. Oblicz azymuty boków nawiązania ze współrzędnych. Wprowadź ilośd pomierzonych kątów n. (Ilośd pomierzonych boków = n-1). Wprowadź kolejne pomierzone dane: kąty i boki oraz numery punktów wyznaczanych. Po wprowadzeniu danych na punkcie ostatnim wyznaczanym (kąt na punkcie i bok do punktu nawiązania C) wprowadź jeszcze tylko kąt na punkcie nawiązania C. W trakcie wprowadzania obliczaj na bieżąco azymuty jak dla ciągu wiszącego: An = Ap_+ a -200[grad] oraz suma bieżąca kątów sk i suma boków sl. Po wprowadzeniu danych liczona jest odchyłka kątowa fk Fk=[a]p -=[a]t [a]t = Ak Ap + n*200[grad] Obliczenie odchyłki kątowej maksymalnej: fktmax = m0* n gdzie m0=180cc dla ciągów do 1,2km lub 90cc dla ciągów > 1,2km Obliczenie poprawki na każdy kąt: vkt = -fkt/n i katów poprawionych: a popr = a pom+ vkt Obliczenie azymutów kolejnych boków na podstawie azymutu początkowego i kątów poprawionych : An = Ap + apopr -200[grad] Obliczenie przyrostów współrzędnych poszczególnych boków: DX=d*cos(A) DY=d*sin(A) i sum bieżących: SDX= DX1 + DX2.. i SDY = DY1 + DY2 Obliczenie sum przyrostów praktycznych i teoretycznych: [DX]p = DX2 + DX2 + DX(n-1) = SDX [DY]p = DX1+ DX2 + DX2 + DX(n-1) = SDY [DX]t = XC XB [DY]t = YC-YB Obliczenie odchyłek przyrostów: fx=[dx]p-[dx]t; fy=[dy]p-[dy]t Obliczenie odchyłki liniowej fl= (fx 2 + fy 2 ) i porównanie z dopuszczalną flmax (w programie nie jest liczona) Rozrzucenie odchyłek przyrostów proporcjonalnie do długości boków vx i =fx/l*d i vy i =-fy/l*d i Obliczenie przyrostów poprawionych: DXp=DX+vx DYp=DY+vy Obliczenie współrzędnych punktów poligonowych Pi Pn-1 na podstawie współrzędnych punktów poprzednich: X 1 = X B + DX 1 ; Y 1 = Y B + DY 1 X2 = X1 + DX2; Y2 = Y1+ DY1 X i+1 = Xi + Dx i ; Y i+1 = Yi + DYi Kontrola: XD = X n-1 + DX n-1 YD = Y n-1 + DY n-1
Obsługa programu Dane do programu wprowadza się z klawiatury ale istnieje możliwośd założenia pliku danych i wykorzystania go do programu zamiast wprowadzania konwersacyjnego. Uruchomienie programu w przypadku wykorzystania pliku danych i dodatkowego wyprowadzenia pliku obliczeo pośrednich, oprócz standardowego pliku wyników Wc2st1.txt Ogólnie Nazwa_programu < plik_danych >plik_wyników W tym przypadku Ciag2st1.exe < plik_danych >plik_wyników Np. Ciag2st1.exe <d1.txt >w1.txt Przykład danych (np. d1.txt) 100 2000.00 3000.00 // nra xa ya 200 2010.00 3300.00 // nrb xb yb 300 1719.50 3932.75 // nrc xc yc 400 1421.10 4199.10 // nrd xd yd 5 // ilośd kątów 245.5720 150.00 // kąt na punkcie nawiązania A // kąt i bok z punktu A do następnego punktu 1 1 // pierwszy punkt wyznaczany 154.3320 200.00 // kąt na punkcie 1 i bok do następnego 2 2 254.8050 175.50 // kąt i bok 3 // ostatni punkt wyznaczany 170.20 210.80 // kąt i bok na punkcie wyznaczanym ostatnim 230.8090 // kąt na punkcie nawiązania C Przykład uruchomienia programu z wprowadzeniem danych z pliku d1.txt i wyprowadzeniem pośrednim do pliku w1.txt. Automatycznie zapisywany jest plik wyników Wc2st11.txt Program ciag2st1.cpp Obliczenie ciagu poligonowego otwartego, dwustronnie nawiazanego o============o---------*---------*--------*------o========o A B 1 2... n C D Punkty nawiazania: A, B oraz C i D Stale do obliczen: M_PI=3.14159 ROG=63.662 rog = 63.662 Dane oddzielamy spacja Wprowadz dane punktow nawiazania: A, B, C, D Wprowadz NrA xa ya => Wprowadz NrB xb yb => Wprowadz NrC xc yc => Wprowadz NrD xd yd => Wprowadz ilosc katow pomierzonych n (o 2 wieksza od ilosci punktow wyznaczanych => Az pocz ap = 97.8787 ap1 = 97.8787 Az pocz = 97.8787 ap2 = 97.8787 Az konc = 153.609 ak1 = 153.609 Pkt A = 100 x = 2000 y = 3000 Pkt B = 200 x = 2010 y = 3300 Pkt C = 300 x = 1719.5 y = 3932.75
Pkt D = 400 x = 1421.1 y = 4199.1 Az(A-B)=97.8787 Az(C-D)=153.609 Lp = 1 Stanowisko 200 Wprowadz kat[grad] w punkcie 200 => Kat = 245.572 Lp = 1 Stan = 200 tk[i]= 245.572 sk = 245.572 Wprowdz bok od punktu 200 do nastepnego => Bok = 150 Suma biezaca dlugosci sl = 150 Wprowadz Nr nastepnego punktu wyznaczanego => np = 1 Nr nastepny = 1 Lp=1 Pkt 200 Kat = 245.572 Bok = 150 Azymut boku 200-1 = 143.451 dx=-94.6128 dy= 116.398 Punkt nastepny 1 x=1915.39 y= 3416.4 Suma biezaca dlugosci sl do punktu 1 = 150 Lp = 2 Stanowisko 1 Wprowadz kat[grad] w punkcie 1 => Kat = 154.332 Lp = 2 Stan = 1 tk[i]= 154.332 sk = 399.904 Wprowdz bok od punktu 1 do nastepnego => Bok = 200 Suma biezaca dlugosci sl = 350 Wprowadz Nr nastepnego punktu wyznaczanego => np = 2 Nr nastepny = 2 Lp=2 Pkt 1 Kat = 154.332 Bok = 200 Azymut boku 1-2 = 97.7827 dx=6.96438 dy= 199.879 Punkt nastepny 2 x=1922.35 y= 3616.28 Suma biezaca dlugosci sl do punktu 2 = 350 Lp = 3 Stanowisko 2 Wprowadz kat[grad] w punkcie 2 => Kat = 254.805 Lp = 3 Stan = 2 tk[i]= 254.805 sk = 654.709 Wprowdz bok od punktu 2 do nastepnego => Bok = 175.5 Suma biezaca dlugosci sl = 525.5 Wprowadz Nr nastepnego punktu wyznaczanego => np = 3 Nr nastepny = 3 Lp=3 Pkt 2 Kat = 254.805 Bok = 175.5 Azymut boku 2-3 = 152.588 dx=-129.038 dy= 118.952 Punkt nastepny 3 x=1793.31 y= 3735.23 Suma biezaca dlugosci sl do punktu 3 = 525.5 Lp = 4 Stanowisko 3 Wprowadz kat[grad] w punkcie 3 => Kat = 170.2 Lp = 4 Stan = 3 tk[i]= 170.2 sk = 824.909
Wprowdz bok od punktu 3 do nastepnego => Bok = 210.8 Suma biezaca dlugosci sl = 736.3 Nr nastepny = 300 Lp=4 Pkt 3 Kat = 170.2 Bok = 210.8 Azymut boku 3-300 = 122.788 dx=-73.8545 dy= 197.439 Punkt nastepny 300 x=1719.46 y= 3932.67 Suma biezaca dlugosci sl do punktu 300 = 736.3 Lp = 5 Stanowisko 300 Wprowadz kat[grad] w punkcie 300 => Kat = 230.809 Lp = 5 Stan = 300 tk[i]= 230.809 sk = 1055.72 Suma biezaca dlugosci sl = 736.3 Nr nastepny = 400 Lp=5 Pkt 300 Kat = 230.809 Bok = 210.8 Azymut boku 300-400 = 153.597 dx=-157.237 dy= 140.403 Punkt nastepny 400 x=1562.22 y= 4073.07 Suma biezaca dlugosci sl do punktu 400 = 736.3 ===========Wyniki po wprowadzeniu wszystkich danych========= sk(prakt) = 1055.72 sk(teor) = 1055.73 fk1 = Skt(prakt)-Skt(teor) = -0.0122759 fk=ak(obl)-ak(teor) = -0.0122759 vk=0.00245518 Suma dlug ciagu sl = 736.3 Suma DXprakt = -290.605 SDXt = -290.5 Suma DYprakt = 632.638 SDYt = 632.75 fx=-0.104761 fy=-0.112286 fl= 0.153567 Wyniki w pliku: Wc2st1.txt Nacisnij Enter
Przykład wyników plik Wc2st1.txt Program cia2st1.cpp Obliczenie ciagu poligonowego dwustronnego o========o---------*---------*--------*---------o=========o A B 1 2... n C D A, B, oraz C, D - punkty nawiazania; 1...n punkty wyznaczane Obliczenie ciagu poligonowego wiszacego, nawiazanego do punktow A i B Pkt Kat Azymut Bok DX DY X Y pomierzony ----------------------- [grad] [grad] 100 97.8787 2000.000 3000.000 pkt A 200 245.5720 143.4507 150.000-94.613 116.398 2010.000 3300.000 pkt B 1 154.3320 97.7827 200.000 6.964 199.879 1915.387 3416.398 2 254.8050 152.5877 175.500-129.038 118.952 1922.352 3616.276 3 170.2000 122.7877 210.800-73.855 197.439 1793.314 3735.228 Obliczenie ciagu poligonowego otwartego, nawiazanego dwustronnie Pkt Kat wyr. Azymut Bok DX vdx DY vdy X Y -------------------------------------- 100 97.8787 2000.000 3000.000 pkt A 200 245.5745 143.4532 150.000-94.617 0.021 116.394 0.023 2010.000 3300.000 pkt B 1 154.3345 97.7876 200.000 6.949 0.028 199.879 0.030 1915.404 3416.417 2 254.8075 152.5951 175.500-129.051 0.025 118.937 0.027 1922.381 3616.327 3 170.2025 122.7975 210.800-73.885 0.030 197.428 0.032 1793.355 3735.290 300 230.8115 153.6090 1719.500 3932.750 pkt C 400 1421.100 4199.100 pkt D Katy w gradach Zestawienie sum i odchylek Sumy katow: [katow]prakt. =1055.7180[grad] [katow]teor. =1055.7303[grad] Odchylka katowa=-0.0123[grad] = -122.8[cc] m0 = 180[cc]; fktmax = m0*sqrt(n)= 402.5[cc] Poprawka kata =0.00246[grad] = 24.6[cc] Dlugosc ciagu = 736.300[m] Sumy przyrostow: [DX]prakt. = -290.605 [DY]prakt. = 632.638 [DX]teoret. = -290.500 [DY]teoret. = 632.750 Odchylki przyrostow i odchylka liniowa: fx =-0.105 fy =-0.112 fl =0.154
Algorytm programu w postaci listy kroków 1. Deklaracja zmiennych i tablic 2. Otwórz plik wyników "Wc2st1.txt" w trybie dopisywania, wydrukuj nagłówek programu ze szkicem 3. Wyświetl nagłówek programu i schemat ciągu wiszącego z oznaczeniami 4. Wprowadź dane punktów nawiązania A, B, C, D 5. Wprowadź ilośd kątów pomierzonych n (o 2 większa od ilości punktów wyznaczanych) 6. Oblicz i wyświetl azymuty boków nawiązania A - B i C-D i sumy teoretyczne przyrostów 7. Wyświetl wyniki 8. Wstaw wyniki obliczeo do odpowiednich tablic i ustaw wartości aktualne do dalszych obliczeo 9. Wykonuj cyklicznie dla podanej ilości kątów n w pętli for: Wprowadź kąt, bok. Oblicz bieżące sumy katów, sumy długości, azymuty i przyrosty ciągu wiszącego, opartego o bok AB Wprowadź numer punktu następnego (jeśli to nie jest już punkt przedostatni, bo wtedy następny = D) Wyświetl dane obliczeo bieżących: azymut, dx, dy, x, y, sumę długości. Zwiększ w pętli licznik bieżący kąta o 1 (pętla for) 10. Przejdź do punktu 9 jeśli licznik kątów nie przekroczył wartości n 11. Oblicz sumę kątów, odchyłkę kątową i poprawkę kąta oraz odchyłkę kątowa maksymalną 12. Wydrukuj wyniki obliczenia ciągu wiszącego do pliku 13. Oblicz kolejne kąty poprawione, azymuty i przyrosty z azymutów wyrównanych oraz sumy bieżące przyrostów (w pętli for) 14. Oblicz odchyłki przyrostów fx i fy i odchyłkę liniową fl. 15. Dla kolejnych boków oblicz poprawki przyrostów, poprawione przyrosty i kolejne, ostateczne współ rzędne punktów, dochodząc do punktu nawiązania C (w pętli for). 16. Wydrukuj zestawienie wyników do pliku. Współrzędne obliczone punktu C powinny byd równe współrzędnym danym. 17. Zamknij plik wyników. 18. Zakoocz program
SCHEMAT BLOKOWY PROGRAMU START Wyświetlenie nagłówek programu, otwórz plik wyników Wprowadź dane punków nawiązania: A, B, C, D: nr, X, Y Wprowadź ilośd kątów pomierzonych n ap=az(xa, ya, xb, yb); // azymut AB ak=az(xc, yc, xd, yd); // Wyświetl wyniki i=1 // pętla for (int i=1; i<=n; i++) i <=n T N Wprowadź kąt i bok (do punktu następnego) Oblicz bieżące sumy katów, sumy długości, azymuty i przyrosty ciągu wiszącego, opartego o bok AB Wprowadź nr punktu wyznaczanego następnego np i=i+1 Oblicz sumę kątów, odchyłkę kątową i poprawkę kąta oraz odchyłkę kątowa Wydrukuj wyniki obliczenia ciągu wiszącego do pliku 1
1 Oblicz kolejne kąty poprawione, azymuty i przyrosty z azymutów wyrównanych oraz sumy bieżące przyrostów dla i = 1 n Oblicz odchyłki przyrostów fx i fy i odchyłkę liniową fl. Dla kolejnych boków oblicz poprawki przyrostów, poprawione przyrosty i kolejne, ostateczne współ rzędne punktów, dochodząc do punktu nawiązania C. dla i=1 n Wydrukuj zestawienie wyników do pliku. Współrzędne obliczone punktu C powinny byd równe współrzędnym danym Zamknij plik wyników KONIEC