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