Помогите решить задачу в PascalABC.Net
Нужно чтобы 3 окружности вращались вместе как показано на изображении.
Есть наработка программы:
Uses GraphABC;
Const
r1 = 18; { радиус }
w1 = -0.035; { угловая скорость }
w2 = -0.034; { угловая скорость }
w3 = -0.033; { угловая скорость }
o1 = 180; { радиус вращения }
Var
x,y,t:integer;
begin
setwindowsize(900,600); {размер окна}
x:=450; y:=300; {центр окна}
lockdrawing; {рисование во внеэкранном буфере}
setpenwidth(2);
t := 0;
repeat
clearwindow; {очищение окна}
DrawCircle(450, 300, 200);
DrawCircle(450, 300, 160);
DrawCircle(450, 300, 120);
DrawCircle(450, 300, 80);
t:=t+1;
setbrushcolor(clLime); {время движения }
circle(x + round(o1 * cos(t*w1)), y - round(o1 * sin(t*w1)), r1);
setbrushcolor(clSkyBlue);
circle(x + round(o1 * cos(t*w2)), y - round(o1 * sin(t*w2)), r1);
setbrushcolor(clPurple);
circle(x + round(o1 * cos(t*w3)), y - round(o1 * sin(t*w3)), r1);
sleep(1); {задержка}
redraw; {формирование нового кадра}
until False;
end.
Answers & Comments
Вот, задал одинаковую угловую скорость и добавил постоянное смещение между кружками. Теперь они бегают вместе.
Uses GraphABC;
Const
r1 = 18; { радиус кружков }
w = -0.035; { угловая скорость }
s = 7; { смещение по времени между кружками }
o1 = 180; { радиус вращения }
Var
x,y,t:integer;
begin
setwindowsize(900,600); {размер окна}
x:=450; y:=300; {центр окна}
lockdrawing; {рисование во внеэкранном буфере}
setpenwidth(2);
t := 0;
repeat
clearwindow; {очищение окна}
DrawCircle(450, 300, 200);
DrawCircle(450, 300, 160);
DrawCircle(450, 300, 120);
DrawCircle(450, 300, 80);
t:=t+1;
setbrushcolor(clLime); {время движения }
circle(x + round(o1 * cos((t+2*s)*w)), y - round(o1 * sin((t+2*s)*w)), r1);
setbrushcolor(clSkyBlue);
circle(x + round(o1 * cos((t+s)*w)), y - round(o1 * sin((t+s)*w)), r1);
setbrushcolor(clPurple);
circle(x + round(o1 * cos(t*w)), y - round(o1 * sin(t*w)), r1);
sleep(8); {задержка}
redraw; {формирование нового кадра}
until False;
end.