Poligon adalah geometri dengan banyak sudut seperti segitiga, segi empat dan nonagon dan lainnya. poligon terdiri atas beberapa titik atau vertex yang terhubung menjadi sebuah bentuk geometri. Poligon memiliki penamaan khusus sesuai jumlah sudutnya.
Poligon merupakan geometri yang dapat dikembangkan secara luas sehingga digunakan di berbagai bidang.
Untuk memudahkan mengenal atau memperkenalkan polygon, salah satu media yang bisa digunakan adalah pc/laptop. Fitur dasar seperti create dan modify adalah sebagai langkah awal untuk membangun sebuah media pembelajaran geometri. Selanjutnya bisa dikembangkan menjadi lebih fungsional sesuai kebutuhan pengembangannya.
Screenshoot media pembelajaran polygin menggunakan delphi :
Kode delphi pengembangan media belajar geometri polygon :
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, Grids; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Image1: TImage; GroupBox1: TGroupBox; GroupBox3: TGroupBox; GroupBox2: TGroupBox; LabelPosisi: TLabel; ButtonClose: TButton; LabelVertex: TLabel; GroupBox4: TGroupBox; StringGrid1: TStringGrid; ButtonDelete: TButton; ButtonDraw: TButton; ButtonEdit: TButton; ButtonInsert: TButton; ButtonClear: TButton; ButtonSave: TButton; ButtonOpen: TButton; Label1: TLabel; procedure ButtonDrawClick(Sender: TObject); procedure ButtonEditClick(Sender: TObject); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ButtonCloseClick(Sender: TObject); procedure ButtonSaveClick(Sender: TObject); procedure ButtonLoadClick(Sender: TObject); procedure refreshCanvas(); procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); procedure ButtonDeleteClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure ButtonInsertClick(Sender: TObject); procedure ButtonClearClick(Sender: TObject); private { Private declarations } public { Public declarations } end; type Point = record X : integer; Y : integer; end; var Form1: TForm1; modeOperasi : integer; posisi : Point; tinggiCanvas : integer; startPolygon : boolean; polygon : array[0..20] of Point; polygonCount : integer; editIndex : integer; const modeIdle = 0; modeDraw = 1; modeEdit = 3; modeInsert = 4; implementation {$R *.dfm} procedure TForm1.refreshCanvas(); var i : integer; begin StringGrid1.RowCount := polygonCount + 1; i := 0; while true do begin if polygon[i].X = -1 then break; StringGrid1.Cells[0,i+1] := inttostr(i+1); StringGrid1.Cells[1,i+1] := inttostr(polygon[i].X); StringGrid1.Cells[2,i+1] := inttostr(polygon[i].Y); if i = 0 then begin image1.Canvas.rectangle(0,0,image1.width-1, image1.height-1); image1.Canvas.MoveTo(polygon[0].X, tinggiCanvas - polygon[0].Y); end else begin if (modeOperasi = modeInsert) and (editIndex = i) then begin Image1.Canvas.Pen.Color := clRed; end else begin Image1.Canvas.Pen.Color := clBlack; end; image1.Canvas.LineTo(polygon[i].X, tinggiCanvas - polygon[i].Y); end; i := i + 1; if i = 20 then break; end; if modeOperasi = modeEdit then begin image1.Canvas.Rectangle(polygon[editIndex].X-5, tinggiCanvas - polygon[editIndex].Y - 5, polygon[editIndex].X+5, tinggiCanvas - polygon[editIndex].Y + 5); end; end; procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Cells[0,0] := 'No'; StringGrid1.Cells[1,0] := 'X'; StringGrid1.Cells[2,0] := 'Y'; end; procedure TForm1.FormResize(Sender: TObject); begin tinggiCanvas := Image1.Height; end; procedure TForm1.ButtonDrawClick(Sender: TObject); begin buttonDraw.Font.Style := [fsBold]; ButtonEdit.Font.Style := []; ButtonInsert.Font.Style := []; modeOperasi := modeDraw; startPolygon := true; polygonCount := 0; polygon[polygonCount].X := -1; refreshCanvas(); end; procedure TForm1.ButtonCloseClick(Sender: TObject); begin if (modeOperasi = modeDraw) and (polygonCount > 1) then begin polygon[polygonCount] := polygon[0]; polygonCount := polygonCount + 1; polygon[polygonCount].X := -1; LabelVertex.Caption := 'Vertex ' + inttostr(polygonCount); refreshCanvas(); buttonDraw.Font.Style := []; ButtonEdit.Font.Style := []; ButtonInsert.Font.Style := []; modeOperasi := modeIdle; end; end; procedure TForm1.ButtonEditClick(Sender: TObject); begin buttonDraw.Font.Style := []; ButtonEdit.Font.Style := [fsBold]; ButtonInsert.Font.Style := []; modeOperasi := modeEdit; editIndex := 1; refreshCanvas(); end; procedure TForm1.ButtonInsertClick(Sender: TObject); begin buttonDraw.Font.Style := []; ButtonEdit.Font.Style := []; ButtonInsert.Font.Style := [fsBold]; modeOperasi := modeInsert; editIndex := 1; refreshCanvas(); end; procedure TForm1.ButtonClearClick(Sender: TObject); begin polygonCount := 0; polygon[polygonCount].X := -1; refreshCanvas(); end; procedure TForm1.ButtonDeleteClick(Sender: TObject); var i : integer; begin if editIndex <> 0 then begin for i := editIndex to polygonCount do begin polygon[i].X := polygon[i+1].X; polygon[i].Y := polygon[i+1].Y; end; polygonCount := polygonCount - 1; refreshCanvas(); end; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin posisi.X := X; posisi.Y := tinggiCanvas - Y; LabelPosisi.Caption := 'Posisi ' + inttostr(posisi.X) + ', ' + inttostr(posisi.Y); end; procedure TForm1.Image1Click(Sender: TObject); var i : integer; begin if (modeOperasi = modeDraw) and (polygonCount < 20) then begin polygon[polygonCount].X := posisi.X; polygon[polygonCount].Y := posisi.Y; polygonCount := polygonCount + 1; polygon[polygonCount].X := -1; LabelVertex.Caption := 'Vertex ' + inttostr(polygonCount); refreshCanvas(); end else if (modeOperasi = modeEdit) and (editIndex > 0)then begin if (editIndex = 1) or (editIndex = polygonCount-1) then begin polygon[1].X := posisi.X; polygon[1].Y := posisi.Y; polygon[polygonCount-1].X := posisi.X; polygon[polygonCount-1].Y := posisi.Y; end else if (editIndex > 0) then begin polygon[editIndex].X := posisi.X; polygon[editIndex].Y := posisi.Y; end; refreshCanvas(); end else if (modeOperasi = modeInsert) and (editIndex > 0) and (polygonCount < 20) then begin for i := polygonCount downto editIndex do begin polygon[i+1].X := polygon[i].X; polygon[i+1].Y := polygon[i].Y; end; polygon[editIndex].X := posisi.X; polygon[editIndex].Y := posisi.Y; polygonCount := polygonCount + 1; refreshCanvas(); end; end; procedure TForm1.ButtonSaveClick(Sender: TObject); var Stream: TStream; begin Stream:= TFileStream.Create('polygon.bin', fmCreate); Stream.WriteBuffer(polygonCount, SizeOf(integer)); Stream.WriteBuffer(polygon, (polygonCount+1) * SizeOf(Point)); Stream.Free; end; procedure TForm1.ButtonLoadClick(Sender: TObject); var Stream: TStream; begin Stream:= TFileStream.Create('polygon.bin', fmOpenRead); Stream.ReadBuffer(polygonCount, SizeOf(integer)); Stream.ReadBuffer(polygon, (polygonCount+1) * SizeOf(Point)); Stream.Free; refreshCanvas(); LabelVertex.Caption := 'Vertex ' + inttostr(polygonCount); end; procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin editIndex := ARow - 1; refreshCanvas(); end; end.
code lengkap media pengajaran geometri poligon:
library :