Jarak Titik ke Garis pada bidang 2D

03Feb10

Sebetulnya ini persoalan trivial, dulu pernah ditanyakan di gdi untuk memeriksa tumbukan antara lingkaran dengan segmen garis namun fungsi ini seringkali bermanfaat untuk persoalan lain. Catatan kecil ini cuma sebagian dari algoritma memeriksa tumbukan yang hanya berfungsi menghitung jarak sebuah titik P ke garis (panjang tak hingga) yang didefinisikan oleh dua buah titik (L1 dan L2). Caranya cukup sederhana yaitu menghitung proyeksi vektor (L1P) ke vektor garis (L1L2) sehingga didapat titik baru (PL) yang berada pada garis. vektor (PLP) tegak lurus garis sehingga untuk menghitung jarak titik P dari garis kita cukup menghitung panjang vektor (PLP). Visualisasi proyeksi ini ada pada gambar di atas.

function jarak_titik_garis( lx1, ly1, lx2, ly2, cx, cy: integer ): real;
var
  vx, vy            : integer;
  wx, wy            : integer;
  udotv             : real;
begin
  vx := ( lx2 - lx1 );
  vy := ( ly2 - ly1 );
  udotv := ( ( cx - lx1 ) * vx + ( cy - ly1 ) * vy ) / ( vx * vx + vy * vy );
  wx := round( udotv * vx ) + lx1 - cx;
  wy := round( udotv * vy ) + ly1 - cy;
  result := round( sqrt( wx * wx + wy * wy ) );
end;

Catatan: untuk menentukan apakah ada lingkaran yang beririsan dengan garis maka diperlukan pemeriksaan tambahan yaitu apakah titik proyeksi berada di antara kedua titik penyusun garis dan jarak titik pusat lingkaran ke garis yang lebih kecil atau sama dengan jari-jari lingkaran tersebut.

About these ads


3 Responses to “Jarak Titik ke Garis pada bidang 2D”

  1. makasih infonya bro..
    ijin di copy..

    salam kenal ya..

  2. 2 emita meliala

    thx :*

  3. 3 aisyah

    yah saya kira jarak dari titik ke garis itu bisa diselesaikan secara geometris,tapi ini pakenya itungan vektoeyang belum aku ngerti -_-


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s


Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 2.082 pengikut lainnya.

%d bloggers like this: