
29.05.2012, 15:52
|
 |
Прохожий
|
|
Регистрация: 29.05.2012
Сообщения: 2
Репутация: 10
|
|
Графика
ПРОГРАММУ ДЕЛАЛА НЕ САМА РАЗБИРАЛИ КАК ТО НА ПАРЕ. И НЕЧЕГО ТОЛКОМ НЕ ПОНЯЛА. НЕ ЗНАЮ КАК ПЕРЕДЕЛАТЬ ПРОМЕЖУТКИ ПО ОСЯМ Х и У что бы были 1 -1 Помогите Пожалуйста))
Кто тут разбирается
Код:
var
Form1: TForm1;
Mashtab:integer;
implementation
{$R *.dfm}
// границы вывода графика
const a = -3*pi;
b = 3*pi;
// сам график
function f(X:real) : Real;
begin
Result := sin(2*x);
end;
procedure TForm1.FormPaint(Sender: TObject);
var
x,y:Real;
i,k:Integer;
begin
Canvas.Pen.Color:=clWhite;
Canvas.Brush.Color:=clWhite;
Canvas.Rectangle(0,0,Width,Height);
Canvas.Pen.Color:=clBlack;
Canvas.MoveTo(ClientWidth div 2,0); //Вертикальна ось
Canvas.LineTo(ClientWidth div 2,ClientHeight);
Canvas.MoveTo(0,ClientHeight div 2); //горизонтальная ось
Canvas.LineTo(ClientWidth,ClientHeight div 2);
Canvas.MoveTo(ClientWidth - 10,ClientHeight div 2 - 5); //стрелочка на горизонтальной оси
Canvas.LineTo(ClientWidth,ClientHeight div 2);
Canvas.LineTo(ClientWidth - 10,ClientHeight div 2 + 5);
Canvas.MoveTo(ClientWidth div 2 - 5,10); //стрелочка на вертикальной оси
Canvas.LineTo(ClientWidth div 2,0);
Canvas.LineTo(ClientWidth div 2 + 5,10);
//---Штрихи по положительной оси x---------------------------------------------
x:=0;
k:=1;
i:=ClientWidth div 2;
while i < ClientWidth do
begin
if x > k then
begin
Canvas.MoveTo(i,ClientHeight div 2 - 5);
Canvas.LineTo(i,ClientHeight div 2 + 5);
Canvas.TextOut(i-2,ClientHeight div 2 + 5,IntToStr(k));
k:=k+1;
end;
x:=x + 1/mashtab;
i:=i + 1;
end;
//---Штрихи по отрицательной оси x---------------------------------------------
x:=0;
k:=- 1;
i:=ClientWidth div 2;
while i > 0 do
begin
if x < k then
begin
Canvas.MoveTo(i,ClientHeight div 2 - 5);
Canvas.LineTo(i,ClientHeight div 2 + 5);
Canvas.TextOut(i-2,ClientHeight div 2 + 5,IntToStr(k));
k:=k - 1;
end;
x:=x - 1/mashtab;
i:=i - 1;
end;
//---Штрихи по отрицательной оси y---------------------------------------------
y:=0;
k:=1;
i:=ClientHeight div 2;
while i < ClientHeight do
begin
if y > k then
begin
Canvas.MoveTo(ClientWidth div 2 - 5,i);
Canvas.LineTo(ClientWidth div 2 + 5,i);
Canvas.TextOut(ClientWidth div 2 + 5,i-5,IntToStr(-k));
k:=k + 1;
end;
y:=y + 1/mashtab;
i:=i + 1;
end;
//---Штрихи по положительной оси y---------------------------------------------
y:=0;
k:=-1;
i:=ClientHeight div 2;
while i > 0 do
begin
if y < k then
begin
Canvas.MoveTo(ClientWidth div 2 - 5,i);
Canvas.LineTo(ClientWidth div 2 + 5,i);
Canvas.TextOut(ClientWidth div 2 + 5,i-5,IntToStr(-k));
k:=k - 1;
end;
y:=y - 1/mashtab;
i:=i - 1;
end;
//-------сам график------------------------------------------------------------
Canvas.Pen.Color:=clRed;
// в первую точку
x:=a;
y:= f(x);
Canvas.MoveTo(ClientWidth div 2 + Round(x*mashtab), ClientHeight div 2 - Round(y*mashtab));
while x < b do
begin
x:= x + 1/mashtab;
y:= f(x);
Canvas.LineTo(Round(x*mashtab) + ClientWidth div 2, ClientHeight div 2 - Round(y*mashtab));
end;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Form1.FormPaint(Sender);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Mashtab:=50;
end;
procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
mashtab:=mashtab + 10;
FormPaint(Sender);
end;
procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
if mashtab>10 then mashtab:=mashtab - 10;
FormPaint(Sender);
end;
end.
Админ: Пользуемся тегами!
|