Здача №866а.
Начертить узор, повторяющий узор, описанный в задаче №865, но составленный из треугольников.
Clrscr;
gd:=Detect;
InitGraph(gd,
gm, ‘ ‘) n:=20;
m:=0.08; ax:= ay:= bx:= by:= cx:= cy:= aax:=i aay:=i bbx:=i bby:=j ccx:=j ccy:=j Line|a,
b| Line|b,
c| Line|c,
a| ax:=aax;
ay:=aay bx:=bbx;
by:=bby cx:=ccx;
cy:=ccy
Raedln;
closegraph;
да
program n866a;
Uses Graph, Crt;
var
gd,gm,n,i:integer;
m,ax,aax,bx,bbx,cx,ccx,ay,aay,by,bby,cy,ccy:real;
begin
Clrscr;
gd:=Detect;
InitGraph(gd,gm,'');
if GraphResult <> grOk then Halt(1);
n:=20;
m:=0.08;
ax:=325+100*cos(90*pi/180);
ay:=225+100*sin(90*pi/180);
bx:=325+100*cos(210*pi/180);
by:=225+100*sin(210*pi/180);
cx:=325+100*cos(330*pi/180);
cy:=325+100*sin(330*pi/180);
for i:=1 to n+1 do begin
aax:=ax+(bx-ax)*m; aay:=ay+(by-ay)*m;
bbx:=bx+(cx-bx)*m; bby:=by+(cy-by)*m;
ccx:=cx+(ax-cx)*m; ccy:=cy+(ay-cy)*m;
Line (round(ax),round(ay),round(bx),round(by));
Line (round(bx),round(by),round(cx),round(cy));
Line (round(cx),round(cy),round(ax),round(ay));
ax:=aax; ay:=aay;
bx:=bbx; by:=bby;
cx:=ccx; cy:=ccy:
end;
readln;
Closegraph;
end.
переменная |
тип |
Назначение |
gd,gm |
целые |
Для вызова процедуры инициализации графики |
i |
целый |
Счетчик в цикле for |
n |
целый |
Количество треугольников |
m |
веществ. |
Коэффициент µ |
ax, aax bx, bbx cx, ccx |
веществ. |
Координаты точек a, b, с соотв. по оси x |
ay, aay by, bby cy, ccy |
веществ. |
Координаты точек a, b, с соотв. по оси y |
Задача №954.
Изобразить точку, совершающую независимые гармонические колебания с частотой w1 по горизонтали и с частотой w2 по вертикали (амплитуда тех и других колебаний равна a). Считать, что в момент времени t точка имеет координаты x= a cos×w1(t-t1) , y=a cos×w2(t-t2); числа t1 и t2 даны. Предусмотреть возможность управления с клавиатуры значениями w1 и w2
Readln; Gd:=detect; Readln; Gd:=detect; Initgraph(Gd,Gm,’’) a:=150; P;=Pi; t1:=p*ramdom(1) t2:=p*random(1)
да
да w1:=w11; w2:=w22 Str(w1,s1); Str(w2,s3); Clear
vief port; Outtext
xy(…) Outtext
xy(…)
C:=’0’; X:=
; Y:=
; Put
pixel(…); Delay
(30); Put
pixel(…); Inc(t);
да C:=readkey; W11:=w1-1; W11:=w1=1; W22:=w2=1; W22:=w2-1; ‘a’ ‘d’ ‘w’ ‘s’
да t:=0;
да Readln; Closrgraph;
Program n954;
Uses Graph,Crt;
Var
w1,w11,w2,w22,x,y,t1,t2,p:Real;
Gd,Gm,a,t:Integer;
s1,s2:String;
c:Char;
Begin
Clrscr;
Randomize;
Writeln('vvedite nachalnui w1'); Readln(w1);
Writeln('vvedite nachalnui w2'); Readln(w2);
Writeln('upravlaem chastotoi po osi x --> a< >d ');
Writeln('upravlaem chastotoi po osi y --> s< >w ');
Writeln('dla vuxoda jmem --> q ENTER'); Readln;
Gd:=Detect;
InitGraph(Gd, Gm, '');
If GraphResult <> grOk Then Halt(1);
a:=150;
p:=Pi;
t1:=p*Random(1);
t2:=p*Random(1);
Repeat;
If (w11<>w1)Or(w22<>w2) Then Begin
Clearviewport;
w1:=w11;
w2:=w22;
Str(w1,s1);
Str(w2,s2);
Outtextxy(10,10,'chastota w1='+s1);
Outtextxy(10,20,'chastota w2='+s2); End;
c:='0';
x:=325+a*cos(w1*(t/1000-t1));
y:=225+a*cos(w2*(t/1000-t2));
Putpixel(Round(x),Round(y),3);
Delay(30);
Putpixel(Round(x),Round(y),0);
Inc(t);
If Keypressed Then Begin
c:=Readkey;
Case c Of
'a': w11:=w1-1;
'd': w11:=w1+1;
'w': w22:=w2+1;
's': w22:=w2-1; End; End;
If t=100000 Then t:=0;
Until c='q';
Readln;
Closegraph;
End.
Пример:
Vvedite nachalnui w1
1
Vvedite nachalnui w2
2
Upravlaem chastotoi po osi x a< >d
Upravlaem chastotoi po osi y s< >w
Dla vuhoda jmem q ENTER
переменная |
тип |
назначение |
w1, w2 |
веществ. |
Угловые скорости движения точки |
w11, w22 |
веществ. |
Для вычисления новых значений w1 и w2 |
x, y |
веществ. |
Координаты центра шара |
t1, t2 |
веществ. |
Начальные фазы |
p |
веществ. |
Число пи |
Gd, Gm |
целые |
Для вызова процедуры инициализации графики |
a |
целый |
Амплитуда колебания точки |
t |
целый |
Время |
s1, s2 |
строковый |
Для хранения значения w1 и w2 соотв. |
c |
символьный |
Управление w1 и w2, а так же для останова цикла repeat |