Beranda

Selasa, 29 April 2014

Model Kubus Atraktif Menggunakan Delphi

Pemodelan Kubus Atraktif menggunakan bahasa pemrograman Delphi dibangun berdasarkan model matematika geometri. Penggunaan matematika geometri akan lebih mudah jika menggunakan vektor dan matrix. Kata Atraktif disini hanya menggambarkan bahwa kubus dapat dirotasikan menggunakan mouse.

Pemodelan menggunakan vektor dan matrix, yang harus diperhatikan adalah pendeklarasian type vektor dan matrik seperti berikut :
type TVektor=array[0..2] of real;
     Tmatriks=array[0..2,0..2] of real;

Fungsi-fungsi yang dibutuhkan adalah perkalian matrix terhadap vektor, tentunya harus menggunakan ordo yang sama.
function perkalianmatriksvektor(matriks:TMatriks;vektor:TVektor):tvektor;
var i,j:integer;
begin
  for i:=0 to high(matriks) do
  begin
    result[i]:=0;
    for j:=0 to high(vektor) do
    result[i]:=result[i]+matriks[i,j]*vektor[j];
  end;
end;

Agar terkesan atraktif maka menggunakan fungsi untuk merotasikan koordinat (x,y,z). Berdasarkan matematika geometri, bahwa untuk merotasikan titik koordinat 3D menggunakan matrix berikut:
rotasi-arah-sumbu-x
rotasi-arah-sumbu-x
rotasi-arah-sumbu-y
rotasi-arah-sumbu-y
Rotasi-arah-sumbu-z
Rotasi-arah-sumbu-z

perhatikan function pada delphi berikut berdasarkan matrix di tersebut.
function rotasi(data:tvektor;sudut:real;arah:arahrotasi):tvektor;
var matriks:TMatriks;
begin
  case arah of
  x:matriks:=setmatriks([
      setvektor([1,0,0]),
      setvektor([0,cos(sudut),-sin(sudut)]),
      setvektor([0,sin(sudut), cos(sudut)])]);
  y:matriks:=setmatriks([
      setvektor([ cos(sudut),0,sin(sudut)]),
      setvektor([0,1,0]),
      setvektor([-sin(sudut),0,cos(sudut)])]);
  z:matriks:=setmatriks([
      setvektor([cos(sudut),-sin(sudut),0]),
      setvektor([sin(sudut), cos(sudut),0]),
      setvektor([0,0,1])]);
  end;
  result:=perkalianmatriksvektor(matriks,data);
end;

Agar dapat atraktif, di dalam pemrograman delphi perlu menggunakan event MouseDown, MouseMove, dan MouseUp seperti berikut :
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  move:=true;
  xc:=x;yc:=y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  move:=false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if move then
  begin
    draw((x-xc)/180*pi,(y-yc)/180*pi);
    xc:=x;yc:=y;
  end;
end;

Perhatikan bahwa pada event MouseMove menggunakan function draw, hal tersebut untuk memudahkan, seperti terlihat berikut ini adalah fungsi dari draw tersebut.
procedure TForm1.draw(sudut1,sudut2:real);
procedure drawgaris(v1,v2:tvektor);
begin
  canvas.MoveTo(width div 2+round(v1[0]),height div 2-round(v1[2]));
  canvas.LineTo(width div 2+round(v2[0]),height div 2-round(v2[2]));
end;
procedure drawteks(v1:TVektor;teks:string);
begin
  canvas.TextOut(width div 2+round(v1[0]),height div 2-round(v1[2]),teks);
end;
var i:integer;
begin
  canvas.Brush.Color:=clwhite;
  canvas.Rectangle(0,0,width,height);
  drawgaris(sumbux[1],sumbux[2]);
  drawgaris(sumbuy[1],sumbuy[2]);
  drawgaris(sumbuz[1],sumbuz[2]);
  drawteks(sumbux[2],'X');
  drawteks(sumbuy[2],'Y');
  drawteks(sumbuz[2],'Z');

  for i:=1 to 8 do
  begin
    titikkotak[i]:=rotasi(titikkotak[i],sudut1,y);
    titikkotak[i]:=rotasi(titikkotak[i],-sudut2,x);
  end;

  drawgaris(titikkotak[1],titikkotak[2]);
  drawgaris(titikkotak[2],titikkotak[3]);
  drawgaris(titikkotak[3],titikkotak[4]);
  drawgaris(titikkotak[4],titikkotak[1]);
  drawgaris(titikkotak[5],titikkotak[6]);
  drawgaris(titikkotak[6],titikkotak[7]);
  drawgaris(titikkotak[7],titikkotak[8]);
  drawgaris(titikkotak[8],titikkotak[5]);
  drawgaris(titikkotak[1],titikkotak[5]);
  drawgaris(titikkotak[2],titikkotak[6]);
  drawgaris(titikkotak[3],titikkotak[7]);
  drawgaris(titikkotak[4],titikkotak[8]);

  drawteks(titikkotak[1],'A');
  drawteks(titikkotak[2],'B');
  drawteks(titikkotak[3],'C');
  drawteks(titikkotak[4],'D');
  drawteks(titikkotak[5],'E');
  drawteks(titikkotak[6],'F');
  drawteks(titikkotak[7],'G');
  drawteks(titikkotak[8],'H');
end;

Dan hasilnya terlihat seperti berikut:

Model-Kubus-Atraktif
Model-Kubus-Atraktif




Model ini juga dibuat menggunakan bahasa pemrograman javascript yang dipostkan di Model Kubus Atraktif Menggunakan Canvas HTML5

Tidak ada komentar:

Posting Komentar