Читайте также: |
|
Рассмотренная программа работает корректно, если функция, график которой надо построить, принимает как положительные, так и отрицательные значения. Если функция во всем диапазоне только положительная или только отрицательная, то в программу следует внести изменения.
Программа вывода графика любой функции, используя компоненту Image
unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ExtCtrls;
Type
TForm1 = class(TForm)
Image1: TImage;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
Var
Form1: TForm1;
Implementation
{$R *.dfm}
function www(x:real):real;
Begin
result:=x*x-3*x+2;
end;
procedure TForm1.Button1Click(Sender: TObject);
var x,y:real; i:integer;
Begin
If Edit1.Text<> '' then
Begin
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.Rectangle(0,0,501,501);
Image1.Canvas.MoveTo(0,251);
Image1.Canvas.LineTo(501,251);
Image1.Canvas.MoveTo(251,0);
Image1.Canvas.LineTo(251,501);
Image1.Canvas.MoveTo(241,20);
Image1.Canvas.LineTo(251,0);
Image1.Canvas.LineTo(261,20);
Image1.Canvas.MoveTo(481,241);
Image1.Canvas.LineTo(501,251);
Image1.Canvas.LineTo(481,261);
for i:=1 to 21 do begin
Image1.Canvas.MoveTo(i*25+1,246);
Image1.Canvas.LineTo(i*25+1,254);
Image1.Canvas.TextOut(i*25+1,255,FloatToStr(StrToInt(edit1.Text)/250*(i*25-250)));
Image1.Canvas.MoveTo(246,i*25+1);
Image1.Canvas.LineTo(254,i*25+1);
Image1.Canvas.TextOut(255,i*25+1,FloatToStr(- StrToInt(edit1.Text)/250*(i*25-250)));
end;
Image1.Canvas.TextOut(240,10,'y');
Image1.Canvas.TextOut(480,230,'x');
x:=StrToInt(edit1.Text)/250*(-250);
y:=www(x);
Image1.Canvas.MoveTo(round(X/Strtoint(Edit1.Text)*250+251),
round(-Y/StrToInt(Edit1.Text)*250+251));
for i:=2 to 501 do begin
x:=StrToInt(edit1.Text)/250*(i-251);
y:=www(x);
Image1.Canvas.LineTo(round(X/Strtoint(Edit1.Text)*250+251),
round(- Y/StrToInt(Edit1.Text)*250+251)); end
End
else ShowMessage('введите масштаб');
end;
procedure TForm1.FormCreate(Sender: TObject);
Begin
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.Rectangle(0,0,501,501);
Image1.Canvas.MoveTo(0,251);
Image1.Canvas.LineTo(501,251);
Image1.Canvas.MoveTo(251,0);
Image1.Canvas.LineTo(251,501);
Image1.Canvas.MoveTo(241,20);
Image1.Canvas.LineTo(251,0);
Image1.Canvas.LineTo(261,20);
Image1.Canvas.MoveTo(481,241);
Image1.Canvas.LineTo(501,251);
Image1.Canvas.LineTo(481,261);
Image1.Canvas.TextOut(240,10,'y');
Image1.Canvas.TextOut(480,230,'x');
end;
procedure TForm1.N2Click(Sender: TObject);
begin close; end;
procedure TForm1.N1Click(Sender: TObject);
Begin
MessageDlg('программа рисует функцию, заданную в подпрограмме-функция. В окне масштаб вводится число отрезков на которые разбиваются координатные прямые',mtinformation,[mbok],0)
end;
End.
Дата добавления: 2015-02-16; просмотров: 25 | Поможем написать вашу работу | Нарушение авторских прав |