Menghitung Momen Invarian pada Delphi

04.33 1 Comments

udah lama ga ngepost gara-gara sibuk ama pekerjaan, jadi sekarang nyempatin diri buat ngepost,.
itung-itung amal,..hehehe
langsung aja pada topik kita kali ini yaitu "Menghitung Momen Invarian pada Delphi"...
tanpa berbasa basi,,,check this out gan!!!

procedure TForm1.hitMomen(var invarian: momen7; cs: pikselbyte);
var
  temp: array of array of byte;
  u, N: array [0 .. 3, 0 .. 3] of real;
  m: array [0 .. 3, 0 .. 3] of real;
  i, j, k, l: integer;
  x1, y1: real;
begin
  for i := 0 to 3 do
    for j := 0 to 3 do
      m[i, j] := 0;

  setlength(temp, cs.h + 1, cs.w + 1);

  // transfer mat citra >> mat biasa
  for i := 1 to cs.h do
    for j := 1 to cs.w do
    begin
      temp[i, j] := cs.isi[i - 1, j - 1];
    end;

  // HIT momen
  for k := 0 to 3 do
    for l := 0 to 3 do
      for i := 1 to cs.h do
        for j := 1 to cs.w do
          m[k, l] := m[k, l] + ((XpangkatY(j, k)) * (XpangkatY(i, l)) * temp[i,
            j]);

  // hit x dan y aksen  >> pusat koordinat obyek
  x1 := m[1, 0] / m[0, 0];
  y1 := m[0, 1] / m[0, 0];

  // insialisasi momen pusat pusat & normalisasi
  for i := 0 to 3 do
    for j := 0 to 3 do
    begin
      u[i, j] := 0;
      N[i, j] := 0;
    end;

  N[1, 1] := (m[1, 1] - y1 * m[1, 0]) / sqr(m[0, 0]);
  N[2, 0] := (m[2, 0] - x1 * m[1, 0]) / sqr(m[0, 0]);
  N[0, 2] := (m[0, 2] - y1 * m[1, 0]) / sqr(m[0, 0]);
  N[3, 0] := (m[3, 0] - 3 * x1 * m[2, 0] + 2 * sqr(x1) * m[1, 0]) / XpangkatY
    (m[0, 0], 2.5);
  N[0, 3] := (m[0, 3] - 3 * y1 * m[0, 2] + 2 * sqr(y1) * m[0, 1]) / XpangkatY
    (m[0, 0], 2.5);
  N[2, 1] := (m[2, 1] - 2 * x1 * m[1, 1] - y1 * m[2, 0] + 2 * sqr(x1) * m[0,
    1]) / XpangkatY(m[0, 0], 2.5);
  N[1, 2] := (m[1, 2] - 2 * y1 * m[1, 1] - x1 * m[0, 2] + 2 * sqr(y1) * m[1,
    0]) / XpangkatY(m[0, 0], 2.5);

  for i := 1 to 7 do
    invarian[i] := 0;

  invarian[1] := N[2, 0] + N[0, 2];
  invarian[2] := sqr(N[2, 0] - N[0, 2]) + 4 * sqr(N[1, 1]);
  invarian[3] := sqr(N[3, 0] - 3 * N[1, 2]) + sqr(3 * N[2, 1] - N[0, 3]);
  invarian[4] := sqr(N[3, 0] + N[1, 2]) + sqr(N[2, 1] + N[0, 3]);
  invarian[5] := (N[3, 0] - 3 * N[1, 2]) * (N[3, 0] + N[1, 2]) *
    (sqr(N[3, 0] + N[1, 2]) - 3 * sqr(N[2, 1] + N[0, 3])) +
    (3 * N[2, 1] - N[0, 3]) * (N[2, 1] + N[0, 3]) *
    (3 * sqr(N[3, 0] + N[1, 2]) - sqr(N[2, 1] + N[0, 3]));
  invarian[6] := (N[2, 0] - N[0, 2]) *
    (sqr(N[3, 0] + N[1, 2]) - sqr(N[2, 1] + N[0, 3])) + 4 * N[1, 1] *
    (N[3, 0] + N[1, 2]) * (N[2, 1] - N[0, 3]);
  invarian[7] := (3 * N[2, 1] - N[0, 3]) * (N[3, 0] + N[1, 2]) *
    (sqr(N[3, 0] + N[1, 2]) - 3 * sqr(N[2, 1] + N[0, 3])) +
    (3 * N[1, 2] - N[3, 0]) * (N[2, 1] + N[0, 3]) *
    (3 * sqr(N[3, 0] + N[1, 2]) - sqr(N[2, 1] + N[3, 0]));

end;


ketujuh momen itu diambil dari persamaan berikut ini



dimana momen 7 merupakan tipe array [1..7] dengan tipe variabel extended dan piksel byte merupakan record yang didefenisikan sebagai berikut,..

type
  pikselbyte = record
    x, h, w: integer;
    isi: array of array of integer;
    spasi: boolean;
  end;


muga-mugahan postingan ane kali ini tentang "Menghitung Momen Invarian pada Delphi" sekian dari ane semoga bermanfaat,..

Unknown

Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.

1 komentar:

  1. gan untuk TForm1.hitMomen itu mengarah ke tombol atau apa???

    makasi

    BalasHapus