Fe
Fedya

Как в паскале нарисовать круг, а вокруг него, чтобы вращался еще один круг, меньший по размеру?



Подобие планет.
Напишите код, пожалуйста

Ан
Антон

Вот такой код возможно прокатит:
program circles;
uses graph, math;
var
gd, gm: integer;
centerx, centery : integer; {цент системы координат}
i,j : real; {x,y уравнения окружности x^2 + y^2 = r^2 }
r, r2 : real; {радиусы окружностей}
cx, cy : real; {координаты в системе координат}
oldcx, oldcy : real; {для вычисления новых координат при вращении}
eps: real; {шаг вычисления}
mastabx, mastaby: integer; {масштаб}
anglegrad : integer; {угол поворота в градусах}
anglerad : real; {угол поворота в радианах}
pi: real;
okrx, okry :real;
oldokrx, oldokry :real;

begin
{центром системы координат является точка 300,200}
centerx := 300;
centery := 200;
{масштаб по осям}
mastabx := 20;
mastaby := 20;
{выбранные радиусы}
r := 2.0;
r2 := 1.0;
eps := 0.01;
anglegrad := 1;
pi := 3.14 ;

okrx :=200;
okry := 20;

{инициализация графики}
gd := D8bit;
gm := m640x480;
initgraph(gd, gm, '');

SetColor(cyan);

{отрисовка осей системы координат}
MoveTo(centerx, centery);
LineTo(centerx, 0);
MoveTo(centerx, centery);
LineTo(centerx, getmaxy);
MoveTo(centerx, centery);
LineTo(0, centery);
MoveTo(centerx, centery);
LineTo(getmaxx, centery);

Rectangle(10,10,50, 50);

putpixel(20,20,cyan);

{вращение}
while anglegrad <= 360 do
begin
anglerad := (real(anglegrad) * pi) / real(180);

{отрисовка внутренней окружности}
i := 0.0;

while i <= r do
begin
j := sqrt( power(r, 2) - power(i, 2) );
cx := real(centerx) + mastabx * i;
cy := real(centery) + mastaby * j;
putpixel(ceil(cx),ceil(cy),cyan);
cx := real(centerx) - mastabx * i;
cy := real(centery) + mastaby * j;
putpixel(ceil(cx),ceil(cy),cyan);
cx := real(centerx) + mastabx * i;
cy := real(centery) - mastaby * j;
putpixel(ceil(cx),ceil(cy),cyan);
cx := real(centerx) - mastabx * i;
cy := real(centery) - mastaby * j;
putpixel(ceil(cx),ceil(cy),cyan);
i := i + eps;
end;

oldcx := okrx;
oldcy := okry;

okrx := oldcx * cos(anglerad) - oldcy * sin(anglerad);
okry := oldcx * sin(anglerad) + oldcy * cos(anglerad);

oldokrx := okrx;
oldokry := okry;

okrx := centerx + okrx;
okry := centery + okry;

circle(ceil(okrx), ceil(okry), 7);

okrx := oldokrx;
okry := oldokry;

anglegrad := anglegrad + 1;
end;

readln;
closegraph;

end.

Похожие вопросы
Вокруг чего все вращается?
почему природные спутники марс, фобос, деймос вращаются вокруг него а не вокруг солнца?
графика в паскале. Как нарисовать квадрат, прямоугольник, ромб, круг, эллипс в паскале?
если бы земля не вращалась вокруг своей оси, каким было бы направление пассатов
если вращать круг вокруг своей оси получится ШАР, а если ось рядом с кругом, что тогда получится?
Может ли большая планета (естественный спутник) вращаться вокруг меньшей планеты?
Анимация. Паскаль АВС. Линия вращается вокруг одной из своих точек
Как в паскале нарисовать круг, а вокруг него, чтобы вращался еще один круг?
Вращается ли вокруг чего-нибудь Солнце?
Вы в каких кругах вращаетесь?