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.
Filed under: delphi, gamedev, programming | 3 Komentar
Kaitkata:2d, collision detection, geometry

makasih infonya bro..
ijin di copy..
salam kenal ya..
thx :*
yah saya kira jarak dari titik ke garis itu bisa diselesaikan secara geometris,tapi ini pakenya itungan vektoeyang belum aku ngerti -_-