Как в паскале нарисовать круг, а вокруг него, чтобы вращался еще один круг, меньший по размеру?
Подобие планет.
Напишите код, пожалуйста
Подобие планет.
Напишите код, пожалуйста
Вот такой код возможно прокатит:
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.