GAECHKA
Твоя помощница в решении задач

Шарик по спирали Архимеда.

Нужно чтобы программа делала так ,чтобы когда спираль вывелась по ее линии от одно конца до другого должна пройти закрашенная окружность с радиусом 2

uses GraphABC;//модуль графики
var  k,r,fi:real;
     x0,y0,x,y,s,l,q:integer;
begin
setpencolor(clGREEN); { 
x := 0;
while x do begin
  line(x, 0, x, WindowWidth); x := x + 20; { 
end;
y := 0;
while y do begin
  line(0, y, WindowWidth, y); y := y + 20; { 
end;
//координаты центра графического окна
x0:=WindowWidth div 2;
y0:=WindowHeight div 2;
 
begin
  SetPenWidth(3);
  SetPenColor(clBlack);
  Line(x0-200, y0, x0+200, y0);
  Line(x0+190, y0+10, x0+200, y0);
  Line(x0+190, y0-10, x0+200, y0);
  TextOut(x0+200, y0+10, 'X');
  
  Line(x0, y0-200, x0, y0+200);
  Line(x0, y0-200, x0-10, y0-190);  
  Line(x0, y0-200, x0+10, y0-190);  
  TextOut(x0+10, y0-200, 'Y');  
  
  s:=-9;
  while s10 do
  begin
    TextOut(x0+s*20-15,y0+2,s);
    s:=s+1;
  end;  
    s:=-9;
  while s10 do
  begin
    TextOut(x0-15,y0+s*-20+2,s);
    s:=s+1;
  end;
  
  SetPenWidth(2);
  SetPenColor(clBlack);
  l:=-200;
  while l200 do
  begin
   Line(x0+l,y0-10,x0+l,y0+10);
   l:=l+20;
  end;
    l:=-180;
  while l200 do
  begin
   Line(x0-10,y0+l,x0+10,y0+l);
   l:=l+20;
  end;
  
end;
// Настройка толщины и цвета линии
SetPenWidth(4);//толщина  пикселя
SetPenColor(clBLUE);//цвет 
//Вывод спирали
writeln ('Введите размер спирали');readln(k);
writeln ('Введите количество витков');readln(q);
fi:=0;//начальный угол
while fi=(q*2)*pi do //нарисуем q витков
 begin
  r:=k*fi;//радиус спирали в данный момент
  x:=x0+round(r*cos(fi)); //координаты точки
  y:=y0-round(r*sin(fi));
  if fi=0 then moveto(x,y)//встаем в первую точку
  else lineto(x,y); //проводим линию к остальным
  fi:=fi+0.01;
end;
 
end.
0
вопрос задан

Источник


1 ответ
uses GraphABC;//модуль графики
procedure spiral(x0,y0,q:integer;k,fi:real);
var r:real;
    x,y,s,l:integer;
begin
SetPenColor(clGreen); { 
SetPenWidth(1);
x := 0;
while x do
 begin
  Line(x, 0, x, WindowWidth); 
  x := x + 20; { 
 end;
y := 0;
while y do
 begin
  Line(0, y, WindowWidth, y); 
  y := y + 20; { 
 end;
SetPenWidth(3);
SetPenColor(clBlack);
SetBrushStyle(bsClear);
Line(x0-200, y0, x0+200, y0);
Line(x0+190, y0+10, x0+200, y0);
Line(x0+190, y0-10, x0+200, y0);
TextOut(x0+200, y0+10, 'X');
Line(x0, y0-200, x0, y0+200);
Line(x0, y0-200, x0-10, y0-190);
Line(x0, y0-200, x0+10, y0-190);
TextOut(x0+10, y0-200, 'Y');
s:=-9;
while s10 do
 begin
  TextOut(x0+s*20-15,y0+2,s);
  s:=s+1;
  end;
s:=-9;
while s10 do
 begin
  TextOut(x0-15,y0+s*-20+2,s);
  s:=s+1;
 end;
SetPenWidth(2);
SetPenColor(clBlack);
l:=-200;
while l200 do
 begin
  Line(x0+l,y0-10,x0+l,y0+10);
  l:=l+20;
 end;
l:=-180;
while l200 do
 begin
  Line(x0-10,y0+l,x0+10,y0+l);
  l:=l+20;
 end;
//Настройка толщины и цвета линии
SetPenWidth(4);//толщина  пикселя
SetPenColor(clBLUE);//цвет
//Вывод спирали
fi:=0;//начальный 
while fi=(q*2)*pi do //нарисуем q витков
 begin
  r:=k*fi;//радиус спирали в данный момент
  x:=x0+round(r*cos(fi)); //координаты точки
  y:=y0-round(r*sin(fi));
  if fi=0 then moveto(x,y)//встаем в первую точку
  else lineto(x,y); //проводим линию к остальным
  fi:=fi+0.01;
end;    
end;
var  k,r,fi:real;
     x0,y0,x,y,q:integer;
begin
//координаты центра графического окна
x0:=WindowWidth div 2;
y0:=WindowHeight div 2;
writeln ('Введите размер спирали');readln(k);
writeln ('Введите количество витков');readln(q);
spiral(x0,y0,q,k,fi);
LockDrawing;
fi:=0;
repeat
 Clearwindow;
 r:=k*fi;//радиус спирали в данный момент
 x:=x0+round(r*cos(fi)); //координаты точки
 y:=y0-round(r*sin(fi));
 spiral(x0,y0,q,k,fi);
 SetBrushColor(clRed);
 SetBrushStyle(bsSolid);
 SetPenColor(clRed);
 Circle(x,y,2);
 Sleep(10);
 fi:=fi+0.1;
 Redraw;
until fi>=q*2*pi; 
end.