You are on page 1of 7

Tugas Mata Kuliah Sistem Transformasi Koordinat Dany Puguh Laksono 07/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 m Tentukan : Koordinat Kartesi 3D terhadap titik A dan titik B jika rotasi = 15 o 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 M=1

, h titik
ke-M Menghitung N, X, Y dan Z titik ke-M

Input ,

Inisialisasi nilai awal iterasi. 2 =0, N2 = a Menghitung iterasi 2, 2, h2 dan N2 dari X, Y, Z, e

Masuk toleransi ?

Y
Masukkan besar rotasi dan translasi masing-masing sumbu

Masukkan X, Y, Z ke matrix koordinat awal

Masukkan besar rotasi ke matrix rotasi

Masukkan besar translasi ke matrix translasi

Mengalikan matrix rotasi dengan matrix koordinat awal Menjumlahkan hasil perkalian dengan matrix translasi Output hasil Transformasi titik ke-M M=M+1

M> K?

Y Selesai

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.3263 YA = 5195675.7674 ZA = 3170873.7353 - Transformasi Kedua ke koordinat kartesi 3D (setelah ditransformasi): XA' = 1779780.0583 YA' = 4822939.0003 ZA' = 3767947.1381 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 count,count2,dx,dy,dz,k,m mtawal,mthasil,mttemp mtrot mttrans ulang ch function degtorad(x : real):real; var py : real; begin py := arctan(1)*4.0; degtorad := x*py/180; end; begin clrscr; 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

b. Titik 2 (titik B) : = 40o; = 100o; h = 500 m - Transformasi pertama ke koordinat kartesi 3D : XB = 1673535.556 YB = 4598001.1506 ZB = 4078306.966 - Transformasi Kedua ke koordinat kartesi 3D (setelah ditransformasi): XB' = 7105108.7972 YB' = 2951118.5111 ZB' = 8127670.314

: : : : : : :

real; integer; array[1..3] of real; array[1..3,1..3] of real; array[1..3] of integer; boolean; char;

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); N x y z {---------RUMUS UTAMA DISINI-------------} := a/sqrt(1-sqr(e)*sqr(sin(lat))); := (h+N)*cos(lat)*cos(long); := (h+N)*cos(lat)*sin(long); := (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(longlong2)<= 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.

You might also like