Пожалуйста, помогите с задачкой. Одна надежда только на помощь форума.
Надо написать программу, которая, используя матрицы масштабирования поворота и переноса, передвигает объект. Например, чтобы перенести точку используется результирующая матрица такого вида |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
23.11.2005 23:25
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.