Beranda

Sabtu, 22 November 2014

Cara mencari pusat lingkaran dan radiusnya dari segitiga yang diketahui

Bagaimana mencari suatu lingkaran yang mengelelilingi sebuah segitiga yang telah diketahui titik-titik sudutnya. perhatikan gambar berikut :

diketahui titik-titik segitiga pada p1(x1,y1), p2(x2,y2) dan p3(x3,y3) hendak mencari titik pusat dan radius lingkaran yang melalui titik-titik segitiga tersebut. untuk dapat mencari pusat lingkara maka yang harus dilakukan adalah cari persamaan linear dari masing-masing titik segitiga ke titik pusat lingkaran kemudian dengan metode eliminasi dari persamaan-persamaan linear tersebut sehingga mendapatkan persamaan yang dapat menentukan itik pusa lingkaran, jika sudah ketemu maka dapat mencari radius lingkaran tersebut dari salah satu titik segitiga yang diketahui. Dan setelah dicari dan dituangkan ke dalam bahasa pemrograman delphi jadilah seperti script di bawah ini

function GetCircle(const x1,y1,x2,y2,x3,y3:real;out x,y,r:real):boolean;
var a,b:array[0..2] of real;
    er:boolean;
begin
  er:=(x1=x2)and(x1=x3);
  er:=(y1=y2)and(y1=y3) or er;
  if not er then begin
    if y1=y2 then begin
      b[0]:=(y3+y2)/2;b[2]:=(x2+x3)/2;
      b[1]:=-(x2-x3)/(y2-y3);
      x:=(x2+x1)/2;
      y:=b[0]+b[1]*(x-b[2]);
      r:=sqrt(sqr(x-x1)+sqr(y-y1));
    end else if y2=y3 then begin
      a[0]:=(y1+y2)/2;a[2]:=(x2+x1)/2;
      a[1]:=-(x2-x1)/(y2-y1);
      x:=(x2+x3)/2;
      y:=a[0]+a[1]*(x-a[2]);
      r:=sqrt(sqr(x-x1)+sqr(y-y1));
    end else begin
      a[1]:=-(x2-x1)/(y2-y1);
      b[1]:=-(x2-x3)/(y2-y3);
      er:=er or (a[1]=b[1]);
      if not er then begin
        a[0]:=(y1+y2)/2;a[2]:=(x2+x1)/2;
        b[0]:=(y3+y2)/2;b[2]:=(x2+x3)/2;
        x:=(a[0]-a[1]*a[2]-b[0]+b[1]*b[2])/(-a[1]+b[1]);
        y:=a[0]+a[1]*(x-a[2]);
        r:=sqrt(sqr(x-x1)+sqr(y-y1));
      end;
    end;
  end;
  result:=not er;
end;


semoga bermanfaat

Cara mengecek apakah sebuah titik di dalam segitiga atau tidak menggunakan Delphi

script berikut adalah contoh bagaimana cara mengecek sebuah titik apakah berada di dalam area lingkaran atau berada di luar lingkaran.


Posisi awal titik di antara titik-titik segitiga

secara teori untuk mengecek apakah sebuahh titik berada di tengah-tengah segitiga maka tariklah garis dari masing-masing titik segitga sampai memotong garis segitga yang berhadapan dengan titik tersebut melalui titik yang akan dicek apakah di dalam segitiga. atau tariklah garis dari titik p1 ke p sampau memotong garis p2p3, begitu pula tarik garis dari titik p2 ke p sampai memotong p1p3 dan tariklah garis dari titik p3 ke p sampai memotong garis p1p2, seperti digambarkan sebagai berikut :


di tarik garis dari sudut segitiga melalui titik yang akan dicek sampai memotong garis segitga yang berhadapan.

dari konsep di atas maka untuk memastikan titik tersebut di dalam segitiga maka logikanya adalah


  1. Jika garis p1a > p1p

  2. Jika garis p2b > p2p

  3. Jika garis p3c > p3p


jika dituangkan dalam bahasa pemrograman delphi maka

function InTriangle(const x,y,x1,y1,x2,y2,x3,y3:real):boolean;
var a,b,c:boolean;
begin
  a:=sqr((y2-y1)*(x3-x2)+(y3-y2)*(x1-x2))>=sqr((y-y1)*(x3-x2)-(y3-y2)*(x-x1));
  b:=sqr((y3-y2)*(x1-x3)+(y1-y3)*(x2-x3))>=sqr((y-y2)*(x1-x3)-(y1-y3)*(x-x2));
  c:=sqr((y1-y3)*(x2-x1)+(y2-y1)*(x3-x1))>=sqr((y-y3)*(x2-x1)-(y2-y1)*(x-x3));
  result:=a and b and c;
end;