Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2011, 16:33   #1
adm2010
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 20
По умолчанию График функции

Добрый день!Есть программа построения графика функции,подскажите пожалуйста
Как в нее добавить координатные оси (х,у)?
unit graph_unit;

interface

uses
SysUtils, Graphics, Forms, Classes,
Controls, StdCtrls, Buttons, ExtCtrls,
Windows;

type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
Edit1: TEdit;
Edit2: TEdit;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

const k = 1001; {кол-во точек графика}
XN = 50; {начальная координата по х}
YN = 10; {начальная координата по у}
NX = 5; {число клеток по х}
NY = 5; {число клеток по у}

var a,b,dx,dy,ymax,ymin : Extended;
x,y : Array[1..K] of Extended;
xe,ye : Array[1..K] of Integer;
lx,ly,xk,yk : Integer;
st : String;

procedure Line(x1,y1,x2,y2:Integer);
Begin
with Form1.Image1.Canvas do
begin
MoveTo(x1,y1);
LineTo(x2,y2);
end;
End;

procedure TForm1.BitBtn1Click(Sender: TObject);

function f(x:extended):extended;
begin f:=exp(x);
end;{FUNCTION}

var i:Integer;
begin
with Form1.Image1.Canvas do
begin
Pen.Color:=clWhite; //очистка области графика
Rectangle(0,0,Image1.ClientWidth,Im age1.ClientHeight);
Pen.Color:=clBlack;
Font.Color:=clBlue;
end;
xk:=Image1.ClientWidth-10;
yk:=Image1.ClientHeight-25;
try
a:=StrToFloat(edit1.Text);
b:=StrToFloat(edit2.Text);
except
MessageBox(0,'Неверный ввод!','Ошибка!',MB_ICONSTOP);
exit;
end;
dx:=(b-a)/(K-1);
ymax:=f(a); //FUNCTION
ymin:=ymax;
for i := 1 to K do //подсчет координат и определение
Begin //максимума и минимума
x[i]:=a+dx*(i-1);
y[i]:=f(x[i]); //FUNCTION
if ymax<y[i] then ymax:=y[i];
if ymin>y[i] then ymin:=y[i];
End;

for i:=1 to K do //пересчет координат для построения
begin
xe[i]:=XN+round((x[i]-a)*(XK-XN)/(b-a));
ye[i]:=YN+round((ymax-y[i])*(YK-YN)/(ymax-ymin));
end;

lx:=(XK-XN) div NX;
dx:=(b-a)/NX;
for i:=1 to (NX+1) do //горизонтальные линии сетки
begin
line(XN+lx*(i-1),YN,XN+lx*(i-1),YK);
str((a+dx*(i-1)):5:2,st);
form1.Image1.Canvas.TextOut(XN-20+lx*(i-1),YK+10,st);
end;

ly:=(YK-YN) div NY;
dy:=(ymax-ymin)/NY;
for i:=1 to NY+1 do //вертикальные линии сетки
begin
line(XN,YN+ly*(i-1),XK,YN+ly*(i-1));
str((ymax-DY*(i-1)):5:2,st);
form1.Image1.Canvas.TextOut(XN-50,YN-4+ly*(i-1),st);
end;

with Form1.Image1.Canvas do
begin
Pen.Color:=clGreen;
Pen.Width:=2;
for i:=1 to K-1 do //график
line(xe[i],ye[i],xe[i+1],ye[i+1]);
Pen.Color:=clBlack;
Pen.Width:=1;
end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form1.Close;
end;

end.
Вложения
Тип файла: rar лаба.rar (2.4 Кб, 9 просмотров)
adm2010 вне форума Ответить с цитированием
Старый 27.04.2011, 17:54   #2
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Да просто чертите линии по центру имэйджа слева направо и сверху вниз и всё, только цвет поменяйте на отличный от цвет сетки.
Код:
	Image1.Canvas.Rectangle (0, 0, Image1.Width, Image1.Height);
	Image1.Canvas.MoveTo (0, (Image1.Height / 2));
	Image1.Canvas.LineTo (Image1.Width, (Image1.Height / 2));
	Image1.Canvas.MoveTo ((Image1.Width / 2), 0);
	Image1.Canvas.LineTo ((Image1.Width / 2), (Image1.Height));
и этот код в самое начало вашего кода
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 27.04.2011 в 17:58.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 27.04.2011, 18:28   #3
adm2010
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от ImmortalAlexSan Посмотреть сообщение
Да просто чертите линии по центру имэйджа слева направо и сверху вниз и всё, только цвет поменяйте на отличный от цвет сетки.
Код:
	Image1.Canvas.Rectangle (0, 0, Image1.Width, Image1.Height);
	Image1.Canvas.MoveTo (0, (Image1.Height / 2));
	Image1.Canvas.LineTo (Image1.Width, (Image1.Height / 2));
	Image1.Canvas.MoveTo ((Image1.Width / 2), 0);
	Image1.Canvas.LineTo ((Image1.Width / 2), (Image1.Height));
и этот код в самое начало вашего кода
что то он не хочет работать,скорее всего я не туда вставляю эту часть проги,пожалуйста можно подробнее куда ее пихнуть
adm2010 вне форума Ответить с цитированием
Старый 28.04.2011, 02:24   #4
lowercase
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 88
По умолчанию

возможно не работает потому что Image1.Width / 2 всегда будет возвращать действительный тип, а в методах moveto и lineto объекта canvas должны быть только целочисловые параметры
lowercase вне форума Ответить с цитированием
Старый 30.04.2011, 14:18   #5
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

adm2010, поставьте вместо "/" "div" (не стал утруждать себя исправлением, думал. что и так понятно будет...)
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 02.05.2011, 18:05   #6
adm2010
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от ImmortalAlexSan Посмотреть сообщение
adm2010, поставьте вместо "/" "div" (не стал утруждать себя исправлением, думал. что и так понятно будет...)
пробовал и так,но увы осей нет
adm2010 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
график функции Максикок Помощь студентам 2 02.12.2010 21:33
График функции dsf Общие вопросы C/C++ 4 17.12.2009 23:20
График функции russian-stalker Общие вопросы Delphi 2 30.09.2009 14:58
График функции Леха Общие вопросы Delphi 18 16.04.2007 20:50