program Valenok_3;
uses crt,graph;
const
k=5000;
var
gm,gd,i:integer;
{----------Pamka----------}
tlx,tly,brx,bry:integer;
bls,blw,blc:integer;
{----------rpaфuK----------}
Grt{Tun},GRc{color}:integer;
Xmin,Xmax,q,max,min,ymax,ymin:real;
Ax,Ay,Bx,By:real;
f,r:real;
fx,fy:integer;
a,b: array[0..k] of real;
{----------CeTKa----------}
gls,glw,glc,nx{число делений оси x},ny{... y},textc:integer;
sx,sy,xv,yv:real;
w:string;
begin
writeln('rpafuK fyHKzuu r=cos(q*f)');
writeln('BBeDuTE q');
readln(q);
{----------rPafu4eckué pe>|<uM ----------}
gd:=0;
initgraph(gd,gm,'c:\bp\bgi');
{----------PamKa----------}
begin
tlx:=20; tly:=20;
brx:=620; bry:=460;
bls:=0; {Tun}
blw:=3; {To/|wuHa}
blc:=14; {color}
setlinestyle(bls,0,blw);
setcolor(blc);
rectangle(tlx,tly,brx,bry);
end;
{----------3Ha4eHuya oCeu u nePeBoD-----------}
xmax:=0.2; xmin:=-0.4;
ymax:=0.7; ymin:=0;
max:=ymin; min:=ymax;
Ax:=(brx-tlx)/(xmax-xmin);
Bx:=tlx-xmin*Ax;
Ay:=(bry-tly)/(max-min);
By:=tly-Ay*min;
{----------ceTKa----------}
begin
gls:=1;{CTu/|b}
glw:=1;{Tun}
glc:=6;{color}
textc:=11;
nx:=20;{Kol De/|eHuu X}
ny:=20;{Kol De/|eHuu Y}
sx:=(brx-tlx)/nx;
sy:=(bry-tly)/ny;
setlinestyle(gls,0,glw);
settextstyle(2,0,2);
setcolor(glc);
for i:=1 to nx-1 do
line (trunc(tlx+sx*i),tly,trunc(tlx+sx*i),bry);
for i:=1 to ny-1 do
line (tlx,trunc(tly+sy*i),brx,trunc(tly+sy*i));
{----------noDnucu----------}
setcolor(textc);
{----------X----------}
for i:=1 to nx+1 do
begin
str(xmin+(i-1)*sx/Ax:1:2,w);
outtextxy(trunc(tlx+sx*(i-1))-4,bry+7,w);
end;
{----------Y----------}
for i:=1 to ny+1 do
begin
str((max+min)-(max-(i-1)*sy/Ay):1:2,w);
outtextxy(tlx-18,trunc(tly+sy*(i-1)-3),w);
end;
{----------3aro/|oBoK----------}
settextstyle(0,0,0);
str(q:1:0,w);
outtextxy(213,5,'rpafuK fyHKzuu r=cos(q*f) q=');
outtextxy(452,5,w);
outtextxy(550,450,'PaDuaHb|');
end;
{----------rPafuk----------}
begin
grc:=4;
for i:=0 to k do begin
r:=(i*180)/(Pi);
a[i]:=cos(q*r)*cos(r);
b[i]:=cos(q*r)*sin(r);
end;
for i:=0 to k do PutPixel(trunc(Ax*a[i]+Bx),trunc(Ay*b[i]+By),grc);
end;
readln;
closegraph;
end.
У меня есть две проблемы, которые очень нужно решить:
1) (наиболее важная) При xmax, xmin, ymax, ymin, которые заданы сейчас (и при любых других, при которых график полностью не влезает в рамку) график не должен быть виден за рамкой. Я пытался добиться этого при помощи "setviewport", но у меня хрень какая-то получается, может чего не догоняю, как пользоваться этим setviewport'ом. Помогите, plz.
И 2) Как сделать, чтобы график состоял не из точек, а были линии.
Заранее благодарен.