АБ
Анюта Березина

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

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

Анна Макарова
Анна Макарова

по поводу вращения http://ru.wikipedia.org/wiki/Матрица_поворота
возможно, поворот сделан неправильно.

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

{инициализация графики}
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;
anglerad := anglerad / 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;

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

while i <= r2 do
begin
j := sqrt( power(r2, 2) - power(i, 2) );

{для поворота}
oldcx := i;
oldcy := j;

i := oldcx * cos(anglerad) - oldcy * sin(anglerad);
j := oldcx * sin(anglerad) + oldcy * cos(anglerad);

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;

anglegrad := anglegrad + 1;
end;

readln;
closegraph;

end.

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