Transformacja współrzędnych przy 2 punktach dostosowania
Transkrypt
Transformacja współrzędnych przy 2 punktach dostosowania
Transformacja współrzędnych przy 2 punktach dostosowania - przez wydłużenie i skręt lub transformacja liniowa Dane są współrzędne 2 punktów dostosowania A i B w układach: pierwotnym (Xp,Yp) i wtórnym (Xw,Yw) oraz współrzędne n punktów 1, 2, ..n w układzie pierwotnym (Xp, Yp). Obliczyć współrzędne tych punktów w układzie wtórnym. Dane: Xp(A) , Yp(A); Xw(A), Yw(A); Xp(B), Yp(B); Xw(B), Yw(B); Xp(i), Yp(i), i=1..n Wzory ogólne: (dxw, dyw) = | dxp dyp | |u v |1,2 gdzie dxp, dyp - przyrosty współrzędnych w układzie wtórnym, względem A u, v – współczynniki transformacji dxw=dxp*v-dyp*u; dyw=dxp*u+dyp*v; Współrzędne w układzie wtórnym Xw=XwA+dxw; Yw=YwA+dyw; Współczynniki u, v (u, v) = | DXp(A,B) DYp(A,B) | [1,2] | DXw(A,B) DYw(A,B)| czyli u=(dxp*dyw-dyp*dxw)/(dxp*dxp+dyp*dyp); v=(dxp*dxw+dyp*dyw)/(dxp*dxp+dyp*dyp); Przyjmując az1=azym(A, B) w układzie pierwotnym; az2=azym(A, B) w układzie pierwotnym; Kąt skrętu między układami: kat1=az2-az1; Współczynnik skali: r = dw/dp; Specyfikacja problemu algorytmicznego Problem algorytmiczny: Przeliczenie współrzędnych z układu pierwotnego na wtórny przy 2 punktach dostosowania Dane wejściowe: Dane są współrzędne 2 punktów dostosowania A i B w układach: pierwotnym (Xp,Yp) i wtórnym (Xw,Yw) oraz współrzędne do przeliczenia - n punktów 1, 2, ..n w układzie pierwotnym (Xp, Yp). Dane wyjściowe: współrzędne n punktów w układzie wtórnym. Zapis algorytmu w postaci listy kroków, pseudokod programu 1. 2. 3. 4. 5. Wyświetl nagłówek programu i wzory obliczeń Wprowadź współrzędne 2 punktów dostosowania w układzie pierwotnym i wtórnym Oblicz współczynniki transformacji u, v oraz współczynnik skali r i kąt skrętu między układami Wprowadzaj kolejne numery punktów do przeliczenia w układzie pierwotnym. Jeśli numer <> 0 to wprowadź współrzędne i przelicz na układ wtórny Funkcja główna programu int main() { // wywołanie kolejnych funkcji start(); // wywołanie funkcji start() - nagłówek programu, wzory dane1(); // wprowadzenie danych 2 punktów dostosowania i obliczenie współczynników u, v przelpunktow(); // wprowadzenie kolejnych punktów przeliczanych w ukl. pierwotnym i przeliczenie na wtórny koniec(); // informacja o pliku wyników i zakończenie programu return 0; // funkcja główna zwraca 0 } SCHEMAT PROGRAMU GŁÓWNEGO START start() dane1() przelpunktow() koniec() KONIEC Przykład obliczeń: Dane Przykłady wyników Prz.1 Dane z klawiatury Transformacja współrzędnych przy 2 punktach dostosowania Program Transf2p.cpp Nr Xp Yp Xw Yw Punkty dostosowania: A i B 100 1236.420 728.640 1372.580 801.230 - Punkt A 101 1301.250 621.380 1421.160 685.690 - Punkt B Dp(A-B) = 125.330 Dw(A-B) = 125.338 Współczynniki transformacji: u = -0.145138 v = 0.989472 Odległości: Dp = 125.330110 Dw = 125.337576 Współczynnik skali = Dw/Dp = 1.000060 Ap = 334.610633[grad] Aw = 325.338698[grad] Aw-Ap = -9.271936[grad] Kat skrętu = atan(u/v) = atan2(v,u) = 390.728064[grad] Punkty przeliczone z układu pierwotnego Nr Xp Yp Xw Yw 1 1309.430 820.620 1458.171 881.645 2 1121.150 813.200 1270.796 901.630 3 1114.360 641.360 1239.137 732.584 Obliczył: …………………….. Prz. 2 Dane z pliku d1.txt Plik danych Dane 20 5000 5000 40 5801.22 4817.12 20 3121.20 4305.70 40 3883.35 3998.38 1 5221.17 4917.90 3 5420.13 4808.83 5 5677.81 4917.55 4 5801.22 4817.12 0 ......Iksinski Legenda // Nr1 Xp1 Yp1 – punkt dostosowania // Nr2 Xp2 Yp2 – punkt dostosowania // Nr1 Xw1 Yw1– punkt dostosowania // Nr2 Xw2 Yw2– punkt dostosowania // N1p X1p Y1p – punkt dostosowania // punkty przeliczane // koniec wykazu punktów // Obliczył Uruchomienie programu: Trans2p.exe < d1.txt > w1.txt Wyniki: plik WynTransf.txt Transformacja wspolrzednych przy 2 punktach dostosowania Program Transf2p.cpp Nr Xp Yp Xw Yw Punkty dostosowania: A i B 20 5000.000 5000.000 3121.200 4305.700 - Punkt A 40 5801.220 4817.120 3883.350 3998.380 - Punkt B Dp(A-B) = 821.826 Dw(A-B) = 821.777 Wspolczynniki transformacji: u = -0.158201 v = 0.987347 Odleglosci: Dp = 821.826370 Dw = 821.777467 Wspolczynnik skali = Dw/Dp = 0.999940 Ap = 385.713775[grad] Aw = 375.599269[grad] Aw-Ap = 389.885494[grad] Kat skretu = atan(u/v) = atan2(v,u) = 389.885494[grad] Punkty przeliczone z ukladu pierwotnego Nr Xp Yp Xw Yw 1 5221.170 4917.900 3326.583 4189.649 3 5420.130 4808.830 3505.771 4050.484 5 5677.810 4917.550 3777.390 4117.063 4 5801.220 4817.120 3883.350 3998.380 Obliczyl: ......Iksinski Wyniki pośrednie – plik w1.txt Transformacja wspolrzednych przy 2 punktach dostosowania Metoda wyznacznikowa Hausbrandta Program Transf2p.cpp Wprowadza się wspolrzedne 2 punktow dostosowania A i B w 2uladach: pierwotnym i wtornym oraz wspolrzedne n punktow 1, 2, ... n w ukladzie pierwotnym Na podstawie DXp i DYp oraz DXw i DYw oblicza sie wspolczynniki u, v u=(dxp*dyw-dyp*dxw)/(dxp*dxp+dyp*dyp) v=(dxp*dxw+dyp*dyw)/(dxp*dxp+dyp*dyp) nastepnie przelicza wspolrzedne punktow z ukladu pierwotnego na wtorny dxw=dxp*v-dyp*u; dyw=dxp*u+dyp*v; Zapis wynikow do pliku WynTransf.txt Nacisnij Enter Punkty dostosowania A i B Podaj Nr Xp, Yp punktu A w ukl. pierwotnym: Podaj Nr Xp, Yp punktu B w ukl. pierwotnym: Podaj Nr Xw, Yw punktu A w ukl. wtornym : Podaj Nr Xw, Yw punktu B w ukl. wtornym : dxp= 801.22 dyp =-182.88 dxw= 762.15 dyw =-307.32 u = -0.158201 v =0.987347 dp = 821.826 dw = 821.777 r = dw/dp = 0.99994 Ap = 385.714 Aw = 375.599 Aw-Ap=389.885 Kat skretu = atan(u/v) = atan2(v,u) = 389.885 NpA = 20 XpA = 5000 YpA = 5000 NpB = 40 XpB = 5801.22 YpB = 4817.12 NwA = 20 XwA = 3121.2 YwA = 4305.7 NwB = 40 XwB = 3883.35 YwB = 3998.38 Przeliczenie punktow z ukladu pierwotnego na wtorny Podaj Nr punktu w ukladzie pierwotnym lub 0 gdy koniec obliczen => Nr = 1 Lp = 1 Podaj X i Y punktu w ukladzie pierwotnym => Xp = 5221.17 Yp = 4917.9 Xw = 3326.58 Yw = 4189.65 Podaj Nr punktu w ukladzie pierwotnym lub 0 gdy koniec obliczen => Lp = 2 Podaj X i Y punktu w ukladzie pierwotnym => Xp = 5420.13 Yp = 4808.83 Xw = 3505.77 Yw = 4050.48 Podaj Nr punktu w ukladzie pierwotnym lub 0 gdy koniec obliczen => Lp = 3 Podaj X i Y punktu w ukladzie pierwotnym => Xp = 5677.81 Yp = 4917.55 Xw = 3777.39 Yw = 4117.06 Podaj Nr punktu w ukladzie pierwotnym lub 0 gdy koniec obliczen => Lp = 4 Podaj X i Y punktu w ukladzie pierwotnym => Xp = 5801.22 Yp = 4817.12 Xw = 3883.35 Yw = 3998.38 Podaj Nr punktu w ukladzie pierwotnym lub 0 gdy koniec obliczen => Nazwisko obliczajacego: Wyniki w pliku WynTransf.txt Nacisnij Enter