Графич. режим паскаль(или формула)

Тема в разделе "Pascal and Delphi", создана пользователем -, 8 июн 2010.

  1. Гость

    Тут...вот...эээ....вообщем программа какбЭ не работает:
    Построить график трактрисы (?)
    Код (Delphi):
    program graf_rezh;

    uses crt, graph;

    var gd, gm, a: integer;
    x, y, phi: real;

    BEGIN
    clrscr;
    gd:= detect;

    initgraph(gd, gm,'');

    If GrOk <> 0 Then exit;

    SetBkColor(RED);
    gd := GetMaxX div 2; gm := GetMaxY div 2;
    phi := 0; a:= 60;

    While phi <= pi do
    Begin

    x := (a * (cos(phi) + ln(sin(phi/2)/cos(phi/2)))) * cos(phi);
    y := a * sin(phi) * sin(phi);


    PutPixel(Round(x) +gd, Round(y) + gm, 1);
    phi := phi + 0.01;
    End;

    readkey;
    closegraph;
    END.
    Выводит код ошибки "200"(бабульки у подъезда мне сказали что 200 ошибка - эт деление на ноль)


    Код (Delphi):
      x := (a * (cos(phi) + ln(sin(phi/2)/cos(phi/2)))) * cos(phi);
    Отсюда убераю логарифм - все норм. только трактриса на трактрису не похожа.

    Тут наверно математику надо знать.
     
  2. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Что-то мне подсказівает что тут ошибка:
    Код (Text):
    While phi <= pi do
    Begin

    x := (a * (cos(phi) + ln(sin(phi/2)/cos(phi/2)))) * cos(phi);
    y := a * sin(phi) * sin(phi);


    PutPixel(Round(x) +gd, Round(y) + gm, 1);
    phi := phi + 0.01;
    End;
    Попробуйте так:
    Код (Text):
    While phi <= pi do
    Begin
    if (phi<>180) then
    begin
    x := a*(ln(sin(phi/2)/cos(phi/2))+cos(phi));
    y := a * sin(phi);
    PutPixel(Round(x) +gd, Round(y) + gm, 1);

    x:=-x;
    PutPixel(Round(x) +gd, Round(y) + gm, 1);
    end;

    phi := phi + 0.01;
    End;
     
  3. Гость

    Та же самая ошибка(200)
     
  4. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    а так:
    Код (Text):
    While phi <= pi do
    Begin
    if (cos(phi/2)<>0) then
    begin
    x := a*(ln(sin(phi/2)/cos(phi/2))+cos(phi));
    y := a * sin(phi);
    PutPixel(Round(x) +gd, Round(y) + gm, 1);

    x:=-x;
    PutPixel(Round(x) +gd, Round(y) + gm, 1);
    end;

    phi := phi + 0.01;
    End;
     
  5. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Вот должно работать, у меня график нормально рисует.
    <!--shcode--><pre><code class='DElphi'>program graf_rezh;

    uses crt, graph;

    var gd, gm, a: integer;
    x, y, phi: real;

    BEGIN
    clrscr;
    gd:= detect;

    initgraph(gd, gm,'');

    If GrOk <> 0 Then exit;

    SetBkColor(0);
    gd := GetMaxX div 2; gm := GetMaxY div 2;
    phi := 0; a:= 60;
    setcolor(8);
    if (cos(phi/2)<>0)and(sin(phi/2)<>0) then
    begin
    x := a*(ln(sin(phi/2)/cos(phi/2))+cos(phi));
    y := a * sin(phi);
    end;
    moveto(Round(x) +gd,- Round(y) + gm);
    phi := phi + 0.01;
    While phi <= pi do
    Begin
    if (cos(phi/2)<>0)and(sin(phi/2)<>0) then
    begin
    x := a*(ln(sin(phi/2)/cos(phi/2))+cos(phi));
    y := a * sin(phi);
    lineto(Round(x) +gd,- Round(y) + gm);

    end;

    phi := phi + 0.01;
    End;
    setcolor(15);
    moveto(0,gm);
    lineto(639,gm);
    moveto(gd,0);
    lineto(gd,479);


    readkey;
    closegraph;
    END.[/CODE]
     
  6. Гость

    И у меня тоже норм рисует ;)
    Спс=)
     
  7. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    у дока под авой +ик есть..
     
Загрузка...

Поделиться этой страницей