Top.Mail.Ru
Ответы

Перевести с Паскаль в Питон В итоге должен быть: треугольник вращающийся в плоскости экрана вокруг своего центра тяжести

Первый код:
uses graph,crt;
type tochka=record {тип точка с полями}
x,y:integer;{координаты}
u,r:real;{угол луча и расстояние до центра вращения}
end;
mas=array[1..3] of tochka; {полигон из 3х-точек}
{угол между лучем и осью Х}
function Ugol(x0,y0,x,y:integer):real;
begin
if (x>x0)and(y<=y0) then Ugol:=arctan((y0-y)/(x-x0)){I четверть}
else if (x>x0)and(y>y0) then Ugol:=arctan((y0-y)/(x-x0))+2*pi{IV четверть}
else if x<x0 then Ugol:=arctan((y0-y)/(x-x0))+pi{II-III четверти}
else if x=x0 then
begin
if yy0 then Ugol:=3*pi/2{вертикально вниз}
end;
end;
{расстояние до точки}
function Radius(x1,y1,x2,y2:integer):real;
begin
Radius:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
{вращение точки вокруг центра}
procedure Vrach(x0,y0:integer;k:real;var a:mas);
var i:integer;
begin
for i:=1 to 3 do
begin
a[i].u:=a[i].u+k;
a[i].x:=x0+round(a[i].r*cos(a[i].u));
a[i].y:=y0-round(a[i].r*sin(a[i].u));
end;
end;
{треугольник}
procedure Trg(a:mas;x1,y1,c:integer);
begin
setcolor(c);
line(a[1].x,a[1].y,a[2].x,a[2].y);
line(a[2].x,a[2].y,a[3].x,a[3].y);
line(a[3].x,a[3].y,a[1].x,a[1].y);
setcolor(9);{точка вращения}
circle(x1,y1,3);
floodfill(x1,y1,9);
end;

{программа}
var p:mas;
xc,yc,x1,y1,i:integer;
c:char;
begin
initgraph(xc,yc,'');
xc:=getmaxX div 2;
yc:=getmaxY div 2;
p[1].x:=xc-180;p[1].y:=yc+50;
p[2].x:=xc+120;p[2].y:=yc+80;
p[3].x:=xc+40;p[3].y:=yc-100;
x1:=round((p[1].x+p[2].x+p[3].x)/3);
y1:=round((p[1].y+p[2].y+p[3].y)/3);
for i:=1 to 3 do{вычислим радиусы и углы}
begin
p[i].r:=Radius(x1,y1,p[i].x,p[i].y);
p[i].u:=Ugol(x1,y1,p[i].x,p[i].y);
end;
outtextXY(xc-50,20,'Exit any key');
repeat
delay(100);
Trg(p,x1,y1,0); {стираем}
Vrach(x1,y1,0.1,p);
Trg(p,x1,y1,12); {рисуем}
until keypressed;
end.
Второй код:
uses graphABC,crt;
type tochka=record {тип точка с полями}
x,y:integer;{координаты}
u,r:real;{угол луча и расстояние до центра вращения}
end;
mas=array[1..3] of tochka; {полигон из 3х-точек}
{угол между лучем и осью Х}
function Ugol(x0,y0,x,y:integer):real;
begin
if (x>x0)and(y<=y0) then Ugol:=arctan((y0-y)/(x-x0)){I четверть}
else if (x>x0)and(y>y0) then Ugol:=arctan((y0-y)/(x-x0))+2*pi{IV четверть}
else if x<x0 then Ugol:=arctan((y0-y)/(x-x0))+pi{II-III четверти}
else if x=x0 then
begin
if yy0 then Ugol:=3*pi/2{вертикально вниз}
end;
end;
{расстояние до точки}
function Radius(x1,y1,x2,y2:integer):real;
begin
Radius:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
{вращение точки вокруг центра}
procedure Vrach(x0,y0:integer;k:real;var a:mas);
var i:integer;
begin
for i:=1 to 3 do
begin
a[i].u:=a[i].u+k;
a[i].x:=x0+round(a[i].r*cos(a[i].u));
a[i].y:=y0-round(a[i].r*sin(a[i].u));
end;
end;
{треугольник}
procedure Trg(a:mas;x1,y1:integer);
begin
setpencolor(clRed);
line(a[1].x,a[1].y,a[2].x,a[2].y);
line(a[2].x,a[2].y,a[3].x,a[3].y);
line(a[3].x,a[3].y,a[1].x,a[1].y);
setpencolor(clBlue);{точка вращения}
circle(x1,y1,3);
floodfill(x1,y1,clBlue);
end;

{программа}
var p:mas;
xc,yc,x1,y1,i:integer;
c:char;
begin
hidecursor;
xc:=windowwidth div 2;
yc:=windowheight div 2;
p[1].x:=xc-180;p[1].y:=yc+50;
p[2].x:=xc+120;p[2].y:=yc+80;
p[3].x:=xc+40;p[3].y:=yc-100;
x1:=round((p[1].x+p[2].x+p[3].x)/3);
y1:=round((p[1].y+p[2].y+p[3].y)/3);
for i:=1 to 3 do{вычислим радиусы и углы}
begin
p[i].r:=Radius(x1,y1,p[i].x,p[i].y);
p[i].u:=Ugol(x1,y1,p[i].x,p[i].y);
end;
lockdrawing;
repeat
clearwindow;
textout(xc-50,20,'Выход любая клавиша');
Vrach(x1,y1,0.1,p);
Trg(p,x1,y1); {рисуем}
delay(100);
redraw;
until keypressed;
end.

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект
5лет

что то не вводится... наверно ошибки есть