Tugas transformasi sistem koordinat
description
Transcript of Tugas transformasi sistem koordinat
Tugas Mata Kuliah Sistem Transformasi KoordinatDany Puguh Laksono07/256988/TK/33449
Soal :Diketahui Sistem Koordinat Geodetik dengan model ellipsoid WGS '84. diperoleh data sbb :A = 30o LU; A = 110o BT; hA = +1000 m B = 40o LS; B = 100o BB; hB = +500 mTentukan : Koordinat Kartesi 3D terhadap titik A dan titik B jika rotasi = 15o searah dengan putaran jarum jam dan translasi (X, Y, Z) = +5 m, +7 m dan +8 m.
Jawab :
Diagram flowchart untuk penyelesaian masalah tersebut :
Mulai
Input a, b Ellipsoid yang digunakan
Hitung e dan f ellipsoid
Input jumlah titik yang
akan dicari = K
Input , , h titik
ke-M
Menghitung N, X, Y dan Z titik ke-M
A
M = 1
B
Mengalikan matrix rotasi dengan matrix
koordinat awal
A
Menjumlahkan hasil perkalian dengan matrix translasi
M = M + 1
M > K?
Output hasil Transformasi
titik ke-M
Menghitung iterasi 2, 2, h2 dan N2 dari
X, Y, Z, e
Inisialisasi nilai awal iterasi. 2 =0, N2 =
a
Masukkan besar rotasi dan translasi
masing-masing sumbu
Masuk toleransi
?
Masukkan X, Y, Z ke matrix koordinat
awal
Masukkan besar rotasi ke matrix
rotasi
Masukkan besar translasi ke matrix
translasi
Selesai
B
Y
T
T
Y
Dari algoritma tersebut dibuat suatu program dalam bahasa pemrograman Pascal untuk menghitung hasil transformasi kedua titik yang dicari. Tampilan program tersebut dengan nilai parameter pada soal adalah seperti di bawah ini:
Dari program tersebut didapat hasil sebagai berikut:
a. Titik 1 (titik A) : = 30o; = 110o; h = 1000 m
- Transformasi pertama ke koordinat kartesi 3D :XA = 1891071.3263YA = 5195675.7674ZA = 3170873.7353
- Transformasi Kedua ke koordinat kartesi 3D (setelah ditransformasi):XA' = 1779780.0583YA' = 4822939.0003ZA' = 3767947.1381
b. Titik 2 (titik B) : = 40o; = 100o; h = 500 m
- Transformasi pertama ke koordinat kartesi 3D :XB = 1673535.556YB = 4598001.1506ZB = 4078306.966
- Transformasi Kedua ke koordinat kartesi 3D (setelah ditransformasi):XB' = 7105108.7972YB' = 2951118.5111ZB' = 8127670.314
Berikut dilampirkan listing program tersebut :
program transformasi_koordinat;uses crt;
const tlrn = 0.00029088;
var a,b,e,f,N,N2,x,y,z,h,h2, lat,long,lat2,long2, rotx,roty,rotz : real; count,count2,dx,dy,dz,k,m : integer; mtawal,mthasil,mttemp : array[1..3] of real; mtrot : array[1..3,1..3] of real; mttrans : array[1..3] of integer; ulang : boolean; ch : char;
function degtorad(x : real):real;var py : real;begin py := arctan(1)*4.0; degtorad := x*py/180;end;
beginclrscr;writeln(' Input a dan b ellipsoid yang akan digunakan : ');writeln('(Contoh pada WGS ''84: a = 6378137; b=6356752.3142)');readln(a,b);{a := 6378137;b :=6356752.3142;}
while (a<b) do begin clrscr; writeln('a harus lebih besar dari b!!'); writeln('Input a dan b ellipsoid yang dimaksud :'); readln(a,b); end;e := sqrt(a*a-b*b)/a;f := (a-b)/a;
writeln('Masukkan Jumlah titik yang akan dicari koordinatnya :');readln(k);m := 1;
{==============MAIN LOOP==============}repeat writeln; writeln('Titik Ke : ',m); writeln('Inputkan koordinat titik dalam koordinat geodetik'); writeln('Berurutan latitude, longitude, dan h :'); readln(lat, long, h);
if ((lat = 180) or (lat=360)) then lat := 0
else if (lat = 270) then lat := -90 else if (lat > 270) then lat := 360-lat else if (lat > 180) then lat := 270-lat else if (lat > 90) then lat := 180-lat; if ((long = 180) or (long=360)) then long := 0 else if (long = 270) then long := -90 else if (long > 270) then long := 360-long else if (long > 180) then long := 270-long else if (long > 90) then long := 180-long; lat := degtorad(lat); long := degtorad(long);
{---------RUMUS UTAMA DISINI-------------} N := a/sqrt(1-sqr(e)*sqr(sin(lat))); x := (h+N)*cos(lat)*cos(long); y := (h+N)*cos(lat)*sin(long); z := (h+(1-sqr(e))*N)*sin(lat); { --------------- }
writeln('Hasil transformasi pertama ke koordinat kartesi 3D : '); writeln('nilai x = ',x:13:5); writeln('nilai y = ',y:13:5); writeln('nilai z = ',z:13:5);
{koreksi dan pengecekan hitungan disini untuk iterasi awal lat=0} writeln; writeln('Tekan <enter> untuk memulai pengecekan nilai transformasi '); readln; writeln('Pengecekan nilai hasil transformasi pertama...'); lat2 := 0; count:= 1; N2 := a; repeat h2 := sqrt(sqr(x)+sqr(y)) / cos(lat2)-N2; lat2 := arctan(z/(sqrt (sqr(x)+sqr(y)) * (1-sqr(e)*N2/(N2+h2)))); N2 := a / (sqrt(1-(f*(2-f)*sqr(sin(lat2))))); long2 := arctan(y/x); writeln; if (count=1) then begin writeln('Nilai awalnya : '); writeln('N = ',N:0:5); writeln('h = ',h:0:5); writeln('lat = ',lat:0:5); writeln('long = ',long:0:5); end; writeln; writeln('Hasil hitungan iterasi ke-',count,' adalah :'); writeln('N = ',N2:16:9,' Selisihnya adalah : ',(N-N2):13:9); writeln('h = ',h2:16:9,' Selisihnya adalah : ',(h-h2):13:9); writeln('lat = ',lat2:16:9,' Selisihnya adalah : ',(lat-lat2):13:9); writeln('long= ',long2:16:9,' Selisihnya adalah : ',(long-long2):13:9);
if ( (abs(N-N2)<= 0.01) and (abs(h-h2)<= 0.01) and (abs(lat-lat2)<= tlrn) and (abs(long-long2)<= tlrn) ) then begin writeln; writeln('Semua hitungan sudah masuk toleransi pada iterasi ke-',count); ulang := false; end else begin writeln('Satu atau lebih hitungan belum masuk toleransi (1 menit dan 0.01 m)'); writeln('Ulang iterasi? <y/t>'); ch := readkey; if ((ch = 'y') or (ch = 'Y')) then ulang := true else ulang := false; end; inc(count); until (ulang = false);
{menghitung transformasi ke kartesi 3D kedua} writeln;
writeln; writeln('Masukkan besar sudut rotasi masing-masing sumbu.'); writeln('Jika berlawanan arah jarum jam, masukkan dalam bentuk negatif.'); writeln('Berurutan sb-X, sb-Y dan sb-Z :'); readln(rotx, roty, rotz); rotx := degtorad(rotx); roty := degtorad(roty); rotz := degtorad(rotz); writeln('Masukkan besar translasi masing-masing sumbu'); writeln('Berurutan sb-X, sb-Y dan sb-Z :'); readln(dx, dy, dz); {memasukkan ke matrix koordinat awal} mtawal[1] := x; mtawal[2] := y; mtawal[3] := z; {memasukkan ke matrix rotasi} mtrot[1,1] := cos(roty)*cos(rotz); mtrot[1,2] := -cos(rotx)*sin(rotz)+sin(rotx)*sin(roty)*cos(rotz); mtrot[1,3] := sin(rotx)*sin(rotz)+cos(rotx)*sin(roty)*cos(rotz); mtrot[2,1] := cos(roty)*sin(rotz); mtrot[2,2] := cos(rotx)*cos(rotz)+sin(rotx)*sin(roty)*sin(rotz); mtrot[2,3] := -sin(rotx)*cos(rotz)+cos(rotx)*sin(roty)*sin(rotz); mtrot[3,1] := -sin(roty); mtrot[3,2] := sin(rotx)*cos(roty); mtrot[3,3] := cos(rotx)*cos(roty); {memasukkan ke matrix translasi} mttrans[1] := dx; mttrans[2] := dy; mttrans[3] := dz; {tulis ke layar} clrscr; writeln('Matrix koordinat awal :'); for count := 1 to 3 do writeln(mtawal[count]:13:5); writeln; writeln('Matrix rotasinya :'); for count := 1 to 3 do begin for count2 := 1 to 3 do write(mtrot[count,count2]:13:9); writeln; end; writeln; writeln('Matrix translasinya :'); for count := 1 to 3 do writeln(mttrans[count]:5);
{mengalikan matrix.. matrix rotasi x matrix koordinat awal} for count := 1 to 3 do for count2 := 1 to 3 do begin mttemp[count] := mtrot[count,count2]*mtawal[count2]; mthasil[count] := mttemp[count] + mthasil[count]; end; {matrix hasil rotasi + matrix translasi} for count := 1 to 3 do mthasil[count] := mthasil[count]+mttrans[count];
writeln; writeln('Matrix hasil transformasi (X'',Y'',Z'') titik ke-',m,' : '); for count := 1 to 3 do writeln(mthasil[count]:13:7);
inc(m);until (m > k);
writeln;writeln;writeln(' Program Selesai');writeln(' Diprogram oleh : Dany Puguh Laksono');writeln(' Jurusan Teknik Geodesi dan Geomatika UGM Yogyakarta');writeln(' Tahun 2008');readln;end.