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