delphi 正弦曲線圖
更新時間:2008年03月15日 18:15:18 作者:
在Delphi中沒有直接正弦曲線的函數(shù)。但是在科學(xué)研究中,正弦曲線的應(yīng)用是非常廣泛的,本實(shí)例介紹如何繪制正弦曲線。
本實(shí)例要在窗體上直接繪制正弦曲線,為了防止窗口切換的過程中會輸出不完整的圖形,因此繪制圖形的關(guān)鍵代碼都放在了窗體的OnPaint過程中,代碼如下:
procedure TForm1.FormPaint(Sender: TObject);
var
x: Integer;
y,a: Double;
begin
Canvas.Pen.Width:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
for x := 0 to self.ClientWidth do
begin
a := (x/self.ClientWidth) * 2 * Pi;
y := Sin(a);
y := (1-y)*self.ClientHeight/2;
Canvas.LineTo(Trunc(x), Trunc(y));
end;
end;
程序首先設(shè)置了窗體的Canvas對象中畫筆的寬度,并且把繪圖的起點(diǎn)移動到了窗體中(0,Trunc(self.ClientHeight/2))的位置。然后通過一個循環(huán)中的a:= (x/self.ClientWidth)*2*Pi語句將一個正弦周期內(nèi)的角度值轉(zhuǎn)換為弧度值,并且把正弦計(jì)算后的結(jié)果存儲在變量y中。最后,循環(huán)中的Canvas.LineTo(Trunc(x), Trunc(y))語句就會在窗體上繪制出連續(xù)的正弦曲線。
程序代碼如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
var
x: Integer;
y,a: Double;
begin
Canvas.Pen.Width:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
for x := 0 to self.ClientWidth do
begin
a := (x/self.ClientWidth) * 2 * Pi;
y := Sin(a);
y := (1-y)*self.ClientHeight/2;
Canvas.LineTo(Trunc(x), Trunc(y));
end;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Refresh;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
self.DoubleBuffered:=true;
//防止圖形閃爍
end;
end.
保存文件,然后按F9鍵運(yùn)行程序。在程序運(yùn)行過程中,會自動在窗體上繪制正弦曲線,運(yùn)行結(jié)果如圖1所示。
圖1 程序運(yùn)行結(jié)果
通過本程序的學(xué)習(xí),不但可以繪制正弦曲線,也可以繪制余弦曲線、正切曲線等各式各樣的曲線,方便科學(xué)研
procedure TForm1.FormPaint(Sender: TObject);
var
x: Integer;
y,a: Double;
begin
Canvas.Pen.Width:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
for x := 0 to self.ClientWidth do
begin
a := (x/self.ClientWidth) * 2 * Pi;
y := Sin(a);
y := (1-y)*self.ClientHeight/2;
Canvas.LineTo(Trunc(x), Trunc(y));
end;
end;
程序首先設(shè)置了窗體的Canvas對象中畫筆的寬度,并且把繪圖的起點(diǎn)移動到了窗體中(0,Trunc(self.ClientHeight/2))的位置。然后通過一個循環(huán)中的a:= (x/self.ClientWidth)*2*Pi語句將一個正弦周期內(nèi)的角度值轉(zhuǎn)換為弧度值,并且把正弦計(jì)算后的結(jié)果存儲在變量y中。最后,循環(huán)中的Canvas.LineTo(Trunc(x), Trunc(y))語句就會在窗體上繪制出連續(xù)的正弦曲線。
程序代碼如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
var
x: Integer;
y,a: Double;
begin
Canvas.Pen.Width:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
for x := 0 to self.ClientWidth do
begin
a := (x/self.ClientWidth) * 2 * Pi;
y := Sin(a);
y := (1-y)*self.ClientHeight/2;
Canvas.LineTo(Trunc(x), Trunc(y));
end;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Refresh;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
self.DoubleBuffered:=true;
//防止圖形閃爍
end;
end.
保存文件,然后按F9鍵運(yùn)行程序。在程序運(yùn)行過程中,會自動在窗體上繪制正弦曲線,運(yùn)行結(jié)果如圖1所示。
圖1 程序運(yùn)行結(jié)果
通過本程序的學(xué)習(xí),不但可以繪制正弦曲線,也可以繪制余弦曲線、正切曲線等各式各樣的曲線,方便科學(xué)研
相關(guān)文章
Delphi實(shí)例演示Rect、Bounds生成TRect的區(qū)別
這篇文章主要介紹了Delphi實(shí)例演示Rect、Bounds生成TRect的區(qū)別,需要的朋友可以參考下2014-07-07Delphi實(shí)現(xiàn)檢測并枚舉系統(tǒng)安裝的打印機(jī)的方法
這篇文章主要介紹了Delphi實(shí)現(xiàn)檢測并枚舉系統(tǒng)安裝的打印機(jī)的方法,需要的朋友可以參考下2014-07-07Delphi之Pascal語言中的關(guān)鍵字及保留字匯總
這篇文章主要介紹了Delphi之Pascal語言中的關(guān)鍵字及保留字匯總,需要的朋友可以參考下2014-07-07delphi7連接mysql5的實(shí)現(xiàn)方法
這篇文章主要介紹了delphi7連接mysql5的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-07-07