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