Misal, pada data batimetri yang tidak berbentuk grid berdasarkan hasil pengukuran di lautan. Maka setiap koordinat x dan y tidak berubah secara beraturan sehingga perlu cara untuk memecahkan persoalan ini, yaitu dengan konsep Delaunay Triangulation. Konsep Delaunay secara lengkap bisa dibaca di http://en.wikipedia.org/wiki/Delaunay_triangulation
Dengan menggunakan bahasa pemrograman Delphi 7, saya berhasil membuat ulang script untuk membuat Delaunay Triangulation, dan dapat di download.
secara singkat saya jelaskan Delaunay Triangulation di bawah ini :
PTitik=^TTitik; // Pointer untuk titik PSisi=^TSisi; // Pounter untuk Sisi PSegitiga=^TSegitiga; // Pointer untuk segitiga TTitik=record x,y:real; // absis dan ordinat suatu titik end; TSisi=record index1,index2:integer; // nomor index titik end; TSegitiga=record index1,index2,index3:integer; // nomor Index titik xp,yp:real; // titik pusat segitiga r:real; // jari-jari pusat segitiga end; TMesh=class // Class untuk membuat mesh private FTitik,FSegitiga,FSisi:TList; max_x,max_y:real; min_x,min_y:real; function GetTitik(Index:Integer):TTitik; function AddSegitiga(Data:TSegitiga):Integer; function GetSegitiga(index:integer):TSegitiga; function AddSisi(sisi:TSisi):integer; function GetSisi(index:integer):TSisi; procedure SetSisi(index:integer;Sisi:TSisi); function Jumlahsegitiga:integer; function Jumlahtitik:integer; public constructor Create; destructor Destroy;override; function AddTitik(x,y:real;ori:boolean=true):integer; procedure BuiltSegitiga; procedure GambarSegitiga(Bitmap:TBitmap); published property Jumlah_Segitiga:integer read Jumlahsegitiga; property Jumlah_Titik:integer read Jumlahtitik; end;
Untuk contoh penggunaan script ini bisa dilihat di bagian bawah ini :
procedure TForm1.FormCreate(Sender: TObject);
var Mesh:TMesh;
Bitmap:TBitmap;
i:integer;
begin
Mesh:=TMesh.Create;
try
randomize;
for i:=1 to 100 do
mesh.AddTitik(random(100),random(100));
mesh.BuiltSegitiga;
bitmap:=TBitmap.Create;
try
bitmap.Width:=510;
bitmap.Height:=510;
bitmap.PixelFormat:=pf24bit;
image1.Picture.Assign(bitmap);
bitmap.Width:=500;
bitmap.Height:=500;
bitmap.Canvas.Brush.Color:=clred;
mesh.GambarSegitiga(Bitmap);
image1.Canvas.Draw(5,5,bitmap);
image1.AutoSize:=true;
finally bitmap.Destroy; end;
finally Mesh.Destroy; end;
end;
![]() |
| Hasil Delaunay Triangulation |
Script lengkapnya dapat di download di sini
Insyaallah pada post selanjutnya akan dibahas pula cara Contouring berdasarkan hasil Triangulation. Semoga bermanfaat

Tidak ada komentar:
Posting Komentar