Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Построить акробата

Автор: Sensitive 11.06.2007 3:24

нужно получить "колонну" акробатов с помощью афинных преобразований. (изображение прикрепляю.)
Этапы построения одного акробата по известным координатам точек показаны на втором рисунке(тоже прикрепляю).
Вот код,который я делала:

uses crt,graph;
const x=200; y=10;
Procedure akr(x,y:integer);
begin
line(x,y,x-10,y);
line(x-10,y,x-13,y+7);
line(x-13,y+7,x-13,y+20);
line(x-13,y+20,x-10,y+27);
line(x-10,y+27,x,y+27);
line(x-10,y+27,x-10,y+34);
line(x-10,y+34,x-20,y+34);
line(x-20,y+34,x-30,y+54);
line(x-30,y+54,x-30,y+27);
line(x-30,y+27,x-35,y+27);
line(x-35,y+27,x-35,y+70);
line(x-35,y+70,x-20,y+45);
line(x-20,y+45,x-20,y+80);
line(x-20,y+80,x,y+80);
line(x-20,y+80,x-35,y+100);
line(x-35,y+100,x-35,y+120);
line(x-35,y+120,x-40,y+120);
line(x-40,y+120,x-40,y+125);
line(x-40,y+125,x-30,y+125);
line(x-30,y+125,x-30,y+100);
line(x-30,y+100,x-20,y+88);
line(x-20,y+88,x,y+88);
end;
begin
init;
akr(x,y);
akr(-x,y);{я думала,если так вызвать эту процедуру,то отобразиться вторая половина акробата симметрия относительно оси Y),но этого не произошло...}
readln;
end.


Подскажите,почему не отобразилась вторая половинка акробата. Вроде по Афинным проеобразованиям так должно было быть....


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение

Автор: volvo 11.06.2007 3:30

Sensitive, для того, чтобы это произошло, надо все знаки "-" поменять на "+" в вычислении координат X, а не менять знак самого X... Вот так:

Procedure akr(x,y:integer; sign: integer);
begin
line(x,y,x-sign*10,y);
... { и так далее везде }

end;

{ вызывать так: }
akr(x, y, 1);
akr(x, y, -1);
...

Автор: Sensitive 11.06.2007 3:40

Понятно теперь. Спасибо, volvo, переделаю.