Tugas transformasi sistem koordinat

Post on 02-Jan-2016

217 views 3 download

description

Transformasi sistem koordinat Geodesi Satelit

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.