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

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Тут...вот...эээ....вообщем программа какбЭ не работает:
Построить график трактрисы (?)
Код:
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 ошибка - эт деление на ноль)


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

Тут наверно математику надо знать.
 
09.11.2009
665
1
#2
Что-то мне подсказівает что тут ошибка:
Код:
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;
Попробуйте так:
Код:
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;
 
09.11.2009
665
1
#4
а так:
Код:
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;
 
09.11.2009
665
1
#5
Вот должно работать, у меня график нормально рисует.
<!--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]