Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[27]

{--------------------------------------------------------Фрагмент N 5 программы "цветные волны точек"

( рисование движущегося массива пикселов с отражением от границы экрана ).

for k:= 1 to N do begin X[k]

Y[k] P[k]

VX[k]:=-2+random(5);

end; Repeat

for k:= 1 to N do begin

if (X[k]+VX[k]<0) or if (Y[k]+VY[k]<0) or

= random(Gx); = random(40); = random(7)+9; VY[k]:=-6+P[k]

{ координаты пиксела }

{ цвет пиксела } { приращение координат }

(X[k]+VX[k]>Gx) (Y[k]+VY[k]>Gy)

{ анализ границ экрана }

then VX[k]:= -VX[k] then VY[k]:= -VY[k]

PutPixel(X[k], Y[k], 0); X[k]:=X[k]+VX[k]; Y[k]:=Y[k]+VY[k]; PutPixel(X[k], Y[k], P[k])

Until KeyPressed;

{-----------------------------------------

{ стирание пиксела } { новые координаты пиксела } { рисование пиксела }

В верхней части экрана генерируются N точек цвета P[k]. Приращение координат точек задается в виде массивов VX, VY , т. е. скорость движения каждой точки постоянная, а направление изменяется при достижении границы экрана. Вертикальная скорость задается одинаковой для точек одного цвета, что создает иллюзию волнового (фронтального) движения. По горизонтали скорость выбирается случайным образом. Алгоритм создания перемещения: точка гасится пикселом с цветом фона и высвечивается вновь после ее смещения.

Практическое задание N 1. 50

Модифицировать программу "цветные волны точек":

1.Создать два перекрещивающихся набора волн: по горизонтали и по вертикали.

2.Изменить условие отражения точек от границ экрана: при достижении горизонтального края должны "прилипать" с изданием звука точки одного цвета, затем другого и т. д. до остановки всех точек.

3.Сгенерировать волны, движущиеся из левой верхней четверти экрана по диагонали. Изменять цвет точек при каждом их отражении от границ экрана.

4.Сгенерировать две волны, движущиеся из правого и левого верхних углов экрана по диагонали. Уменьшать скорость точек при каждом их отражении от границ экрана.

{-----------------------------------------------------------------Фрагмент N 6 программы "молекулы газа в поле тяготения"

( рисование массива пикселов, хаотично перемещающихся в заданном направлении).

for k:= 1 to N do begin

X[k] Y[k] P[k]

= random(Gx); = random(Gy); = random(7)+9


for k:= 1 to N do begin

PutPixel(X[k], Y[k], 0);

dx:= -25 + random(51);dy:= -25 + random(71);

if (X[k]+dx > 0) and (X[k]+dx < Gx) then X[k]:= X[k] + dx; if (Y[k]+dy > 0) and (Y[k]+dy < Gy) then Y[k]:= Y[k] + dy;

PutPixel(X[k], Y[k], P[k])

Until KeyPressed;

{----------------------------------------------------------------- }

В программе определены массивы координат точек X[1. . N], Y[1. . N] и цвета P[1. . N]. Точки гасятся, случайным образом смещаются их координаты на dx, dy, а затем точки вновь высвечиваются прежним цветом - создается иллюзия движения. Причем dx генерируется в диапазоне -25. . . 25, а dy - в диапазоне -25. . . 45, поэтому точки стремятся к нижней границе экрана, имитируя поведение молекул газа в толстом слое атмосферы. Введено ограничение на перемещение - если при очередном назначении dx или dy точка выйдет за границу экрана, то изменения соответствующей координаты не произойдет.

Практическое задание N 1. 51

Модифицировать программу " молекулы газа в поле тяготения":

1.Изменить направление поля тяготения (в правый нижний угол).

2.Точки ярких цветов направьте к правой границе экрана, точки темных цветов - к левой границе.

3.Для одной из точек (например, с номером 100) отслеживать ее движение в виде ломаной линии.

4.Смещать сто раз через один цикл (Repeat. . . Until) нижнюю границу на один пиксел вверх, затем вниз и т. д. , моделируя изменение "объема сосуда с молекулами". Добавить оператор, контролирующий и изменяющий координаты точек, выходящих за границу.

{-------------------------------------------------------------Фрагмент N 7 программы "пчелиный рой" ( рисование массива пикселов, хаотично перемещающихся около движущейся точки).

for k:=1 to N do begin X[k]

Y[k] P[k]

if i < Gx then i:= i for k:= 1 to N do begin

dx:= -25 + random(51); dy:= -25 + random(51);

= random(Gx) = random(Gy) = random(16)

{ смещение "центра" роя }

PutPixel(X[k], Y[k], 0);

if (X[k]+dx > 0) and (X[k]+dx < Gx) { контроль выхода пикселов }

then begin{ за границу экрана }

if (X[k]+dx < Gx-i) then dx:= dx+5 { контроль выхода "центра" } else dx:= dx-5; X[k]:= X[k]+dx { за границу экрана } end;


if (Y[k]+dy > 0) and

then begin

if (Y[k]+dy<Gy div 2)

else dy:= dy-5; end;

PutPixel(X[k], Y[k],

Until KeyPressed;

(Y[k]+dy < Gy) { контроль выхода пикселов }

{ за границу экрана } then dy:= dy+5 { контроль выхода " центра" } Y[k]:= Y[k]+dy{ за границу экрана }

Эта программа - усложненный вариант фрагмента N6. Случайные смещения координат точек dx, dy сначала задаются равномерно из диапазона 25. . . 25. Затем анализируется местоположение каждой точки относительно полюса с координатами Gx-i, Gy div 2. Смещения координат корректируются так, чтобы точки "тяготели" к "центру". "Центр" перемещается из- за изменения параметра "i", чем моделируется перемещение роя.

Практическое задание N 1. 52

Модифицировать программу "пчелиный рой":

1.Замедлить перемещение роя и запрограммировать изменение направления перемещения при достижении края экрана.

2.Ускорить перемещение роя и запрограммировать движение по вертикали с изменением направления перемещения при достижении края экрана.

3.Создать два роя разного цвета, один из которых случайным образом перемещающиеся по экрану, а другой движется вслед за первым.

4.Создать два роя разного цвета, один из которых случайным образом перемещающиеся по экрану, а другой движется в противоположную сторону.

5.Смоделировать движение кометы.

{----------------------------------------------------------------Фрагмент N 8 программы "мячик в коробке" ( рисование движущейся окружности с анализом границ области по цвету пиксела .

x1:=100; x2:=400; y1:=120; y2:=380; {Координаты углов наружной коробки} dx:= -5; dy:= 3;{ начальный шаг движения мяча }

r:= 4;{ Радиус мяча }

SetColor(11); Rectangle(x1, y1, x2, y2);{ Наружная коробка }

Rectangle(x1+30, y1+70, x1+120, y1+90); { Внутренние коробки } Rectangle(x1+200, y1+90, x1+230, y1+200); xc:= x1+90; yc:= y1+110; Circle(xc, yc, r);{ Мячик }

ax:= abs(dx); ay:= abs(dy); { число пикселов по ходу движения } Repeat i2:= 0; i1:= 0;{ признаки удара о стенку равны нулю }

zx:= dx div abs(dx); zy:= dy div abs(dy); { направление движения } for i:= 1 to ax do if GetPixel(xc+(r+i)*zx, yc) > 0 then { удар о вертикальную стенку }

begin dx:= -dx; i1:= 1; break end;



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53]