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-y |
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 ini juga dibuat menggunakan bahasa pemrograman javascript yang dipostkan di Model Kubus Atraktif Menggunakan Canvas HTML5
Tidak ada komentar:
Posting Komentar