Tugas transformasi sistem koordinat

9
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 = 30 o LU; A = 110 o BT; h A = +1000 m B = 40 o LS; B = 100 o BB; h B = +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 :

description

Transformasi sistem koordinat Geodesi Satelit

Transcript of Tugas transformasi sistem koordinat

Page 1: 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

Page 2: Tugas transformasi sistem koordinat

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

Page 3: Tugas transformasi sistem koordinat

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:

Page 4: Tugas transformasi sistem koordinat
Page 5: Tugas transformasi sistem koordinat

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

Page 6: Tugas transformasi sistem koordinat

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;

Page 7: Tugas transformasi sistem koordinat

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.