доброго времени суток!! привет вам из далекой (или не далекой) Беларуси! у меня проблема: нужно написать на зачет по информатике 2 графические задачи((((
помогите чем сможете...
1. сектор вращается против часовой стрелки и меняет цвета (7 цветов). внутренний угол 30 градусов
2. фигура, состоящая из 2-х кругов с диаметрами D=40 и d=18, движется по горизонтальной поверхности длиной L=180. При достижении стенок на концах поверхности направление движения фигуры меняется...
помогите пожалуйста, не то у меня отберут стипендию(((
begin gd := Detect; InitGraph(gd, gm, ''); if GraphResult <> grOk then begin WriteLn('Error'); Halt(100) end;
x := 200; y := 200; Ellipse(x, y, 0, 360, 103, 103);
repeat
for p := 1 to numSectors do begin SetColor(DarkGray); Ellipse(x, y, Pred(p) * EverySector, p * EverySector, 100, 100);
GetArcCoords(ac); with ac do begin Line(x, y, xStart, yStart); Line(x, y, xEnd, yEnd);
SetFillStyle(SolidFill, colors[p]);
if colors[p] > 0 then begin inc(colors[p]); if colors[p] > LightGray then colors[p] := 1; end;
FloodFill( (xStart+xEnd) div 2, (yStart+yEnd) div 2, DarkGray); end; end; T := colors[numSectors]; move(colors[1], colors[2], pred(numSectors)*sizeof(integer)); Colors[1] := T;
delay(25000);
until keypressed;
ReadLn; CloseGraph end.
yakudza_m
17.01.2009 17:35
клёво!! но у меня почему-то рисует только 1 сектор синим, а остальные чёрным...
volvo
17.01.2009 18:21
Цитата
у меня почему-то рисует только 1 сектор синим, а остальные чёрным...
И что потом происходит? Должно начаться вращение цветного сектора с одновременной сменой его цвета. Я проверял у себя, все нормально работает. Чем компилируешь, уточни. Это будет работать только с использованием Турбо Паскаля.
yakudza_m
17.01.2009 19:49
у меня Free Pascal IDE ...я посмотрел, всё работает, но только оч медленно...как бы мне поменять время задержки???
я еще посмотрел у вас на форуме прогу для любого графика, и хочу спросить, где бы мне вставить функцию SETLINESTYLE и чтоб на картинке были видны координаты на осях?
renesko1
17.01.2009 23:11
delay(время в милисекундах); 1000 = 1 сек
volvo
17.01.2009 23:13
Цитата
у меня Free Pascal IDE
Ах, вот оно что... В FreePascal-е очень медленная реализация FloodFill, это не дает программе выполняться так же быстро, как в Турбо Паскале. Все, что могу предложить - это вот такой вот трюк:
uses crt,graph;
var gm, gd, x, y: Integer; ac: ArcCoordsType;
const numSectors = 12; EverySector = 360 div numSectors;
begin gd := d4bit; // уменьшаем число цветов gm := m640x480; // и размер до обычных размеров VGA
InitGraph(gd, gm, ''); if GraphResult <> grOk then begin WriteLn('Error'); Halt(100) end;
x := 200; y := 200; repeat setfillstyle(solidfill, black); // затираем прежнее изображение bar(x - 100, y - 100, x + 100, y + 100);
SetColor(White); Ellipse(x, y, 0, 360, 103, 103);
for p := 1 to numSectors do begin SetColor(DarkGray); Ellipse(x, y, Pred(p) * EverySector, p * EverySector, 100, 100);
GetArcCoords(ac); with ac do begin Line(x, y, xStart, yStart); Line(x, y, xEnd, yEnd);
if colors[p] > 0 then begin SetFillStyle(SolidFill, colors[p]); // и рисуем новый цветной сектор inc(colors[p]); if colors[p] > LightGray then colors[p] := 1; FloodFill( (xStart+xEnd) div 2, (yStart+yEnd) div 2, DarkGray); end; end; delay(50); end; T := colors[numSectors]; move(colors[1], colors[2], pred(numSectors)*sizeof(integer)); Colors[1] := T;
delay(15);
until keypressed;
ReadLn; CloseGraph end.
За счет того, что FloodFill вызывается один раз вместо 12-ти, получается 12-ти кратное ускорение. Но все равно, видно процесс заливки...
yakudza_m
18.01.2009 0:13
аааааа, жжош, вольво!!!! СПАСИБО БОЛЬШОЕ!!!
прога как ломанулась!!!
а у тя есть какие-нибудь советы по поводу второй проги??
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.