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

Условие задачи:

Построить графики функции, заданной в параметрически, при разных значениях параметра "а" (должна быть реализована возможность вывода нескольких графиков при разных значениях "а")
x=a(sh(t) -t), y=a(ch(t)-1) (a>0).

Помогите пожалуста. Заранее благодарю.
matic
Мне та прога не поможет... у меня задание в параметрическом виде построить.
compiler
Цитата(matic @ 29.04.2007 15:16) *

Мне та прога не поможет... у меня задание в параметрическом виде построить.
прсти но что значит <<в параметрическом виде>>
volvo
Цитата
у меня задание в параметрическом виде построить.
Значит, вот это поможет:

Графики функций, заданных параметрически
matic
volvo, благодарю. Помог твой мануал.

Вот что получилось:


{$N+}
{$E+}
program ex;
uses crt, graph;

type
  tcurve = procedure(t: double;
           var x, y: double);
const

  a = 3;
  b = 9;
  L: double = 4;

  scale = 12; { mashtab izobrageniya }
  step = 0.005;

{
  procedura dlya otrisovki tochki krivoy,
  parametricheskoe predstavlenie kotoroy zadano funkchiey F
  pri znachenii parametra = T
}

procedure set_point(t: double; f: tcurve);
var
  x, y: double;
begin
  f(t, x, y);
  putpixel( (getmaxx div 2) + trunc(scale * x),
            (getmaxy div 2) - trunc(scale * y), white );
end;

{
  otrisovka krivoy so znacheniem parametra,
  legavshim v intervale [start, finish] i shagom izmeneniya parametra step
}

procedure draw_curve(start, finish, step: double;
          f: tcurve);
var t: double;
begin
  { risovanie osi koordinat }
  setcolor(green);
  line(0, getmaxy div 2, getmaxx, getmaxy div 2);
  line(getmaxx div 2, 0, getmaxx div 2, getmaxy);

  t := start; { nachalo intervala }

  { poka ne vishli za granichu intervala }

  while t <= finish do begin
    set_point(t, f);
    t := t + step; { narashivaem parametr}
  end;
end;

procedure giper(t: double; var x, y: double); far;
begin
  { sh(t)=(exp(t)-exp(-t))/2, ch(t)=(exp(t)+exp(-t))/2 }
  x := a * ((exp(t)-exp(-t))/2-t);
  y := a * ((exp(t)+exp(-t))/2-1);
end;

  var
mode, driver:integer;
begin
driver:=detect;
initgraph(mode, driver, 'D:\program\bp\bgi');

  {draw_curve(nachalo intervala, konech intervala, shag, my_curve);}

  draw_curve(-10, 10, step, giper);
  readln;

  closegraph;
end.



У меня теперь проблема, как мне организовать возможность вывода нескольких графиков при разных значениях "а" ?
Помогите пожалуйста.
volvo
Тебя смущает то, что A задана константой, и ее нельзя менять? Тогда опиши A вот так:
Const a: double = 3;

и после того, как отрисовал первую кривую с одним значением A, меняй его (фактически, теперь это - переменная со стартовым значением) и отрисовывай с другим значением...
matic
Цитата(volvo @ 2.05.2007 22:37) *

Тебя смущает то, что A задана константой, и ее нельзя менять? Тогда опиши A вот так:
Const a: double = 3;

и после того, как отрисовал первую кривую с одним значением A, меняй его (фактически, теперь это - переменная со стартовым значением) и отрисовывай с другим значением...

А по подробней?
volvo
const
  a: double = 3;

... 

begin
  driver:=detect;
  initgraph(mode, driver, 'D:\program\bp\bgi');

  draw_curve(-10, 10, step, giper); { <--- Рисуешь с параметром А = 3 }
  a := 27; { меняешь параметр }
  draw_curve(-10, 10, step, giper); { <--- Рисуешь уже с A = 27 }
  readln;

  closegraph;
end.

Можешь еще и цвет графика в процедуру draw_curve передавать как параметр, чтобы графики отрисовывались разными цветами при разных A ...
matic
Цитата
Можешь еще и цвет графика в процедуру draw_curve передавать как параметр, чтобы графики отрисовывались разными цветами при разных A ...

что-то у меня не получилось... помоги пожалуйста...
volvo
Так, например:
procedure set_point(t: double; f: tcurve; color: integer);
var x, y: double;
begin
  f(t, x, y);
  putpixel( (getmaxx div 2) + trunc(scale * x), (getmaxy div 2) - trunc(scale * y), color );
end;

procedure draw_curve(color: integer; start, finish, step: double; f: tcurve);
var t: double;
begin
  setcolor(green);
  line(0, getmaxy div 2, getmaxx, getmaxy div 2);
  line(getmaxx div 2, 0, getmaxx div 2, getmaxy);

  t := start; { nachalo intervala }

  { poka ne vishli za granichu intervala }
  while t <= finish do begin
    set_point(t, f, color);
    t := t + step; { narashivaem parametr}
  end;
end;
...

  draw_curve(white, -10, 10, step, giper);
  a := 27;
  draw_curve(yellow, -10, 10, step, giper);
...

Autre
Здравствуйте! А у Вас не найдётся готовой задачи(.pas) для улитки Паскаля, Декартова листа, спирали Архимеда и др. Заранее благодарен Вам! До свидания!
Артемий
Цитата
для улитки Паскаля, Декартова листа, спирали Архимеда и др.

Оригинально!Может перечислил-бы до конца? no1.gif Или наброски показал?
volvo
Зайди по ссылке из сообщения №5, там лежит файл curves.pas ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.