Jarak Titik ke Garis pada bidang 2D

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.

3 comments

  1. anonymous · Juni 12, 2010

    makasih infonya bro..
    ijin di copy..

    salam kenal ya..

  2. emita meliala · Maret 15, 2011

    thx :*

  3. aisyah · Mei 8, 2012

    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:

Logo WordPress.com

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

Gambar Twitter

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

Foto Facebook

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

Foto Google+

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

Connecting to %s