Помощь - Поиск - Пользователи - Календарь
Полная версия: движение обьектов в ТП
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
nast
Пожалуйста, помогите с задачкой. Одна надежда только на помощь форума.

Надо написать программу, которая, используя матрицы масштабирования поворота и переноса, передвигает объект.
Например, чтобы перенести точку используется результирующая матрица такого вида
|cosa_______________ sina ________________ 0|
|-sina_______________ cosa_______________ 0|
|x (1-cosa)+y sina ____ y(1-cosa) – x sina ____ 1|

где x и у начальниэ кординати , а – угол поворота.

задача состои в том что эллипс двигаэтся по невидимому контуру круга с радиусом 50 по часовой стрелке. Элипс проходя четверть круга уменьшается а в следуэшей – увеличивается. Начальный радиус эллипса rx=30 и ry=15, конечные 10 и 5.
[COLOR=purple]
virt
program graphic_for_nast;
uses crt,graph;
var gd,gm : integer;
i : integer;
rx : integer;
x,y,x1,y1 : real;

begin
gd := detect;
initgraph(gd,gm,'');
rx := 30;
x := 50;
y := 0;
while true do
begin
for i := 1 to 90 do
begin
x1 := 320 - (x - 50) * cos (i / 57.3) + (y - 50) * sin (i / 57.3);
y1 := 240 - (y - 50) * cos (i / 57.3) - (x - 50) * sin (i / 57.3);
setcolor(2);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
delay(1000);
setcolor(0);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
if i mod 9 = 0 then rx := rx - 2;
end;
if keypressed then break;
for i := 91 to 180 do
begin
x1 := 320 - (x - 50) * cos (i / 57.3) + (y - 50) * sin (i / 57.3);
y1 := 240 - (y - 50) * cos (i / 57.3) - (x - 50) * sin (i / 57.3);
setcolor(2);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
delay(1000);
setcolor(0);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
if i mod 9 = 0 then rx := rx + 2;
end;
if keypressed then break;
for i := 181 to 270 do
begin
x1 := 320 - (x - 50) * cos (i / 57.3) + (y - 50) * sin (i / 57.3);
y1 := 240 - (y - 50) * cos (i / 57.3) - (x - 50) * sin (i / 57.3);
setcolor(2);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
delay(1000);
setcolor(0);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
if i mod 9 = 0 then rx := rx - 2;
end;
if keypressed then break;
for i := 271 to 360 do
begin
x1 := 320 - (x - 50) * cos (i / 57.3) + (y - 50) * sin (i / 57.3);
y1 := 240 - (y - 50) * cos (i / 57.3) - (x - 50) * sin (i / 57.3);
setcolor(2);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
delay(1000);
setcolor(0);
ellipse(round(x1),round(y1),0,360,rx,rx shr 1);
if i mod 9 = 0 then rx := rx + 2;
end;
if keypressed then break;
end;
closegraph;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.