Assalamualaikum...
kembali lagi untuk berbagi ilmu nih...
full code :
unit Utama;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
editx1: TEdit;
edity1: TEdit;
editx2: TEdit;
edity2: TEdit;
ScrollBox1: TScrollBox;
Image1: TImage;
btnbintang: TButton;
btnclear: TButton;
btnclose: TButton;
Label5: TLabel;
Label6: TLabel;
editTX: TEdit;
editTy: TEdit;
Label8: TLabel;
editR: TEdit;
btnTrans: TButton;
btnScaling: TButton;
btnRotasi: TButton;
Label9: TLabel;
editS: TEdit;
Timer1: TTimer;
Button1: TButton;
editTimer: TEdit;
Timer2: TTimer;
Timer3: TTimer;
Button2: TButton;
Button3: TButton;
Label10: TLabel;
btnppscaling: TButton;
btnpprotasi: TButton;
Label7: TLabel;
Label11: TLabel;
editPx: TEdit;
editPy: TEdit;
btnPivot: TButton;
procedure btnbintangClick(Sender: TObject);
procedure btnclearClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btncloseClick(Sender: TObject);
procedure btnRotasiClick(Sender: TObject);
procedure btnTransClick(Sender: TObject);
procedure btnScalingClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure btnppscalingClick(Sender: TObject);
procedure btnpprotasiClick(Sender: TObject);
procedure btnPivotClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Math;
var
a, b, i : integer;
x1, y1, x2, y2 : integer;
x,y : array[1..5] of double;
Px, Py : double;
Tx, Ty : double;
S : single;
R : double;
simpanX : double;
{$R *.dfm}
procedure TForm1.btnbintangClick(Sender: TObject);
begin
x1 := StrToInt(editx1.Text);
y1 := StrToInt(edity1.Text);
x2 := StrToInt(editx2.Text);
y2 := StrToInt(edity2.Text);
x[1] := x1;
y[1] := y2;
x[2] := x1+(x2-x1) div 2;
y[2] := y1;
x[3] := x2;
y[3] := y2;
x[4] := x1;
y[4] := y2+2*(y1-y2) div 3;
x[5] := x2;
y[5] := y[4];
Image1.Canvas.Pen.Color := clBlue;
Image1.Canvas.Pen.Style := psSolid;
Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
for i := 1 to 5 do
begin
Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
end;
end;
procedure TForm1.btnclearClick(Sender: TObject);
begin
Image1.Canvas.Pen.Color := clWhite;
Image1.Canvas.Pen.Style := psSolid;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Rectangle(1,1,Image1.Width,Image1.Height);
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Pen.Style := psDot;
Image1.Canvas.MoveTo(a,0);
Image1.Canvas.LineTo(a,Image1.Height);
Image1.Canvas.MoveTo(0,b);
Image1.Canvas.LineTo(Image1.Width,b);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
a := Image1.Width div 2;
b := Image1.Height div 2;
btnclearClick(nil);
{ScrollBox1.VertScrollBar.Position := b;
ScrollBox1.HorzScrollBar.Position := a; }
end;
procedure TForm1.btncloseClick(Sender: TObject);
begin
close;
end;
procedure TForm1.btnRotasiClick(Sender: TObject);
begin
R := StrToFloat(editR.Text);
//rotasi biasa
Px := StrToFloat(editPx.Text);
Py := StrToFloat(editPy.Text);
simpanX := Px;
Px := Px * Cos(R * pi/180) - Py * Sin(R * pi/180);
Py := simpanX * Sin(R * pi/180) + Py * Cos(R * pi/180);
editPx.Text := FloatToStr(Px);
editPy.Text := FloatToStr(Py);
for i := 1 to 5 do
begin
simpanX := x[i];
x[i] := x[i] * Cos(R * pi/180) - y[i] * Sin(R * pi/180);
y[i] := simpanX * Sin(R * pi/180) + y[i] * Cos(R * pi/180);
end;
btnclearClick(Sender);
Image1.Canvas.Pen.Color := clBlue;
Image1.Canvas.Pen.Style := psSolid;
Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
for i := 1 to 5 do
begin
Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
end;
end;
procedure TForm1.btnTransClick(Sender: TObject);
begin
Tx := StrToFloat(editTx.Text);
Ty := StrToFloat(editTy.Text);
//translasi biasa
Px := StrToFloat(editPx.Text);
Py := StrToFloat(editPy.Text);
Px := Px + Tx;
Py := Py + Ty;
editPx.Text := FloatToStr(Px);
editPy.Text := FloatToStr(Py);
for i := 1 to 5 do
begin
x[i] := x[i] + Tx;
y[i] := y[i] + Ty;
end;
btnclearClick(Sender);
Image1.Canvas.Pen.Color := clBlue;
Image1.Canvas.Pen.Style := psSolid;
Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
for i := 1 to 5 do
begin
Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
end;
end;
procedure TForm1.btnScalingClick(Sender: TObject);
begin
S := StrToFloat(editS.Text);
//scaling biasa
Px := StrToFloat(editPx.Text);
Py := StrToFloat(editPy.Text);
Px := Px * S;
Py := Py * S;
editPx.Text := FloatToStr(Px);
editPy.Text := FloatToStr(Py);
for i := 1 to 5 do
begin
x[i] := x[i] * S;
y[i] := y[i] * S;
end;
btnclearClick(Sender);
Image1.Canvas.Pen.Color := clBlue;
Image1.Canvas.Pen.Style := psSolid;
Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
for i := 1 to 5 do
begin
Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
btnTransClick(Sender);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Interval := StrToInt(editTimer.Text);
Timer1.Enabled := NOT Timer1.Enabled;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
btnScalingClick(Sender);
end;
procedure TForm1.Timer3Timer(Sender: TObject);
begin
btnRotasiClick(Sender);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer2.Interval := StrToInt(editTimer.Text);
Timer2.Enabled := NOT Timer2.Enabled;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Timer3.Interval := StrToInt(editTimer.Text);
Timer3.Enabled := NOT Timer3.Enabled;
end;
procedure TForm1.btnppscalingClick(Sender: TObject);
begin
Px := StrToFloat(editPx.Text);
Py := StrToFloat(editPy.Text);
//translasi titik pivot ke 0,0 diikuti titik lainnya
Tx := -Px;
Ty := -Py;
for i := 1 to 5 do
begin
x[i] := x[i] + Tx;
y[i] := y[i] + Ty;
end;
//scaling
S := StrToFloat(editS.Text);
for i := 1 to 5 do
begin
x[i] := x[i] * S;
y[i] := y[i] * S;
end;
//kembalikan titik pivot ke titik semula
Tx := Px;
Ty := Py;
for i := 1 to 5 do
begin
x[i] := x[i] + Px;
y[i] := y[i] + Py;
end;
//gambarkan
btnclearClick(Sender);
Image1.Canvas.Pen.Color := clBlue;
Image1.Canvas.Pen.Style := psSolid;
Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
for i := 1 to 5 do
begin
Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
end;
end;
procedure TForm1.btnpprotasiClick(Sender: TObject);
begin
Px := StrToFloat(editPx.Text);
Py := StrToFloat(editPy.Text);
//translasi titik pivot ke 0,0 diikuti titik lainnya
Tx := -Px;
Ty := -Py;
for i := 1 to 5 do
begin
x[i] := x[i] + Tx;
y[i] := y[i] + Ty;
end;
//rotasi
R := StrToFloat(editR.Text);
for i := 1 to 5 do
begin
simpanX := x[i];
x[i] := x[i] * Cos(R * pi/180) - y[i] * Sin(R * pi/180);
y[i] := simpanX * Sin(R * pi/180) + y[i] * Cos(R * pi/180);
end;
//kembalikan titik pivot ke titik semula
Tx := Px;
Ty := Py;
for i := 1 to 5 do
begin
x[i] := x[i] + Px;
y[i] := y[i] + Py;
end;
//gambarkan
btnclearClick(Sender);
Image1.Canvas.Pen.Color := clBlue;
Image1.Canvas.Pen.Style := psSolid;
Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
for i := 1 to 5 do
begin
Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
end;
end;
procedure TForm1.btnPivotClick(Sender: TObject);
begin
Px := x1 + (x2-x1) div 2;
Py := y2 + (y1-y2) div 2;
editPx.Text := FloatToStr(Px);
editPy.Text := FloatToStr(Py);
end;
end.
bisa ajarin step bye step cara bikinnya
BalasHapus