Помощь - Поиск - Пользователи - Календарь
Полная версия: Программа для рисования графиков
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
klem4
Вот от нечего делать решил сделать свою программу, в принципе все делается достаточно стандартными способами, вот только отрисовка осей с точками получилось достаточно громоздкая, но может кому-нибудь пригодится ...

uses graph,crt;

var
maxX, maxY : word;

(*
Инициализация графики
*)
procedure OpenGr;
var
gd,gm,ge : integer;
begin

gd := Detect;

InitGraph(gd, gm, '');

ge := GraphResult;

if ge <> grOk then begin
writeln('Open Graph Error : ',GraphErrorMsg(ge));
readln;
halt(1);
end;

end;

(*
Завершение работы в граф режиме
*)
procedure CloseGr;
var
ge : integer;
begin

CloseGraph;

ge := GraphResult;

if ge <> grOk then begin
writeln('Close Graph Error : ',GraphErrorMsg(ge));
halt(1);
end;

end;

procedure Initialize(var x,y : word);
begin

x := GetMaxX;

y := GetMaxY;

end;

(*
Отрисовка координатных осей
*)
procedure ShowDecart;
var
i,delta,count : integer;
s : string;
begin

SetColor(Red);

// сами линии
line(0, maxY div 2, maxX, maxY div 2);
line(maxX div 2, 0, maxX div 2, maxY);

SetColor(white);
SetFillStyle(1, white);

delta := maxY div 20;

i := maxX div 2;

// далее отрисовка точек и чисел над осями
count := 0;
while (i<=maxX) do begin
str(count ,s);
circle(i, maxY div 2, 2);
outtextxy(i, maxY div 2 + 5, s);
FloodFill(i,maxY div 2, white);
inc(i, delta);
inc(count);
end;

i := maxX div 2;

while (i>=0) do begin
circle(i, maxY div 2, 2);
FloodFill(i, maxY div 2, white);
dec(i, delta);
end;

i := maxY div 2;

while (i<=maxY) do begin
circle(maxX div 2, i, 2);
FloodFill(maxX div 2, i, white);
inc(i, delta);
end;

i := maxY div 2;

count := 0;
s:= '';

while (i>=0) do begin
outtextxy(maxX div 2 + 5, i, s);
circle(maxX div 2, i, 2);
FloodFill(maxX div 2, i, white);
dec(i, delta);
inc(count);
str(count, s);
end;


end;

(*
Вычисляемая функция
*)
function F(x : single) : single;
begin
F := -sqr(x)+4;
end;

(*
Функции GX и GY - перевод математических координат
в графические, sx и sy - соответсвенные масштабы по осям x и y
*)
function GX(x : Extended; sx : integer) : integer;
begin
GX := trunc(sx * x) + maxX div 2;
end;

function GY(y : Extended; sy : integer) : integer;
begin
GY := maxY div 2 - trunc(sy * y);
end;

(*
Отрисовка графика
a и b - границы для вычисления функции
*)
procedure Shedule(a, b : extended);
const
h : extended = 1E-5; // шаг вычисления
var
i : extended;
scale : word; // масштаб для GX и GY
begin
i := a;
scale := maxY div 20;
while(i<=b) do begin
putpixel(GX(i, scale), GY(F(i), scale), Yellow);
i := i + h;
end;
end;

begin

Clrscr;
OpenGr;
Initialize(maxX, maxY);
ShowDecart;
Shedule(-20,20);
Readln;
CloseGr;

end.
Altair
назвался горшком полезай в печь!
РАз взялся за это то сделай материал для ФАКа ...
эту свою прогу в качестве фичи, а так все проще напиши!
Как выводить графики !
с пояснениями, красиво что быбыло. эту мессагу удалишь.

lol.gif Типа, Нажмите для просмотра прикрепленного файла
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.