画框输出三角函数

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    sin1: TMenuItem;
    cos1: TMenuItem;
    cls1: TMenuItem;
    procedure FormPaint(Sender: TObject);
    procedure sin1Click(Sender: TObject);
    procedure cos1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure cls1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.cls1Click(Sender: TObject);        //清除sin和cos曲线
begin
  paintbox1.Refresh;
end;

procedure TForm1.cos1Click(Sender: TObject);        //画出cos函数曲线
var
  oldx, oldy, t: integer;
  xt, yt: real;
begin
  oldx := round(form1.ClientWidth / 2);
  oldy := round(form1.ClientHeight / 2);
  for t := -oldx to oldx do
    begin
      xt := t / 20;
      yt := cos(xt);
      paintbox1.Canvas.Pixels[t + oldx, oldy + round(yt * 20)] := clblack;
    end;
end;

procedure TForm1.FormPaint(Sender: TObject);        //当窗体刷新时执行此事件
var
  oldx, oldy, xt, yt: integer;
  st: real;
  rect1: trect;
begin
  with paintbox1 do
    begin
      top := 0;
      left := 0;
      width := form1.ClientWidth;
      height := form1.ClientHeight;
      canvas.Pen.Color := clblack;
    end;
  oldx := round(form1.ClientWidth / 2);             //获得窗体的原点x坐标
  oldy := round(form1.ClientHeight / 2);            //获得窗体的原点y坐标
  paintbox1.Canvas.MoveTo(oldx,0);
  paintbox1.Canvas.LineTo(oldx,paintbox1.Height);   //画y轴的轴线
  paintbox1.Canvas.MoveTo(0,oldy);
  paintbox1.Canvas.LineTo(paintbox1.Width,oldy);    //画x轴的轴线
  for xt := -9 to 9 do                              //画出x轴的坐标
    if xt <> 0 then
      begin
        st := xt * 10 * pi;
        paintbox1.Canvas.MoveTo(oldx + round(st),oldy-1);
        paintbox1.Canvas.LineTo(oldx + round(st),oldy);
        paintbox1.Canvas.TextOut(oldx + round(st) - 10, oldy + 1, inttostr(xt) + '/2π');
      end;
  for yt := -9 to 9 do                              //画出y轴的坐标
    if yt <> 0 then
      begin
        st := yt * 20;
        paintbox1.Canvas.MoveTo(oldx + 1,oldy + round(st));
        paintbox1.Canvas.LineTo(oldx,oldy + round(st));
        paintbox1.Canvas.TextOut(oldx - 20, oldy + round(st), inttostr(yt));
      end;
end;

procedure TForm1.N2Click(Sender: TObject);          //退出
begin
  form1.close;
end;

procedure TForm1.sin1Click(Sender: TObject);        //画出sin曲线
var
  oldx, oldy, t: integer;
  xt, yt: real;
begin
  oldx := round(form1.ClientWidth / 2);
  oldy := round(form1.ClientHeight / 2);
  for t := -oldx to oldx do
    begin
      xt := t / 20;
      yt := sin(xt);
      paintbox1.Canvas.Pixels[t + oldx, oldy + round(yt * 20)] := clblack;
    end;
end;

end.

 

posted @ 2011-12-12 11:11  endsnow  阅读(194)  评论(0)    收藏  举报