本實例要在窗體上直接繪製正弦曲線,為了防止視窗切換的過程中會輸出不完整的圖形,因此繪製圖形的關鍵程式碼都放在了窗體的OnPaint過程中,程式碼如下:
procedureTForm1.FormPaint(Sender:TObject);
var
x:Integer;
y,a:Double;
begin
Canvas.Pen.Width:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
forx:=0toself.ClientWidthdo
begin
a:=(x/self.ClientWidth)*2*Pi;
y:=Sin(a);
y:=(1-y)*self.ClientHeight/2;
Canvas.LineTo(Trunc(x),Trunc(y));
end;
end;
程式首先設定了窗體的Canvas物件中畫筆的寬度,並且把繪圖的起點移動到了窗體中(0,Trunc(self.ClientHeight/2))的位置。然後透過一個迴圈中的a:=(x/self.ClientWidth)*2*Pi語句將一個正弦週期內的角度值轉換為弧度值,並且把正弦計算後的結果儲存在變數y中。最後,迴圈中的Canvas.LineTo(Trunc(x),Trunc(y))語句就會在窗體上繪製出連續的正弦曲線。
程式碼如下:
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,ExtCtrls,StdCtrls;
type
TForm1=class(TForm)
procedureFormPaint(Sender:TObject);
procedureFormResize(Sender:TObject);
procedureFormCreate(Sender:TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
{$R*.dfm}
procedureTForm1.FormPaint(Sender:TObject);
var
x:Integer;
y,a:Double;
begin
Canvas.Pen.Width:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
forx:=0toself.ClientWidthdo
begin
a:=(x/self.ClientWidth)*2*Pi;
y:=Sin(a);
y:=(1-y)*self.ClientHeight/2;
Canvas.LineTo(Trunc(x),Trunc(y));
end;
end;
procedureTForm1.FormResize(Sender:TObject);
begin
Refresh;
end;
procedureTForm1.FormCreate(Sender:TObject);
begin
self.DoubleBuffered:=true;
//防止圖形閃爍
end;
end.
儲存文件,然後按F9鍵執行程式。在程式運作過程中,會自動在窗體上繪製正弦曲線,運行結果如圖1所示。
圖1程式運行結果
透過本程式的學習,不但可以繪製正弦曲線,也可以繪製餘弦曲線、正切曲線等各式各樣的曲線,方便科學研