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