Построение кластера методом «Муравья»

Апрель 25, 2009 / Автор AlexR / Рубрики Статьи, Программирование / Комментировать

Метод «муравья» в построении кластера заключается в том, что в центр экрана ставится неподвижная «точка», а затем с разных сторон экрана вылетают «точки», которые двигаются хаотично, но по определенным правилам:

1.       Движение» точки» происходит только вверх, вниз, влево и вправо на одну единицу.

2.       При соприкосновении с любой «точкой», рассматриваемая точка завершает движение и останавливается в том месте, где произошло соприкосновение.muravei

При этом я оставил случай того, что из-за экрана могут вылететь сразу несколько «точек», то есть, следующая «точка» не начнет движение, пока рассматриваемая его не закончит.

Для того чтобы построение кластера происходило быстрее я ввел мнимые грани, которые расширяются по мере увеличения количества «прилипших точек».

Программа реализована на языке Pascal ABC 3.0, на Borland Pascal нужно будет заменить некоторые команды, а именно:

1.       Заменить вызов процедуры GraphAbc на соответствующую процедуру в Borland Pascal — Graph, при этом не забыть добавить команды InitGraph () и CloseGraph;

2.       Убрать команды изменения экрана: SetWindowHeght, SetWindowWidth;

3.       Заменить команды работы с графикой, таких как clwhite и clblack на соответствующие в BP.

Листинг программы:

{Построение кластера методом «Муравья»

Рогов Александр 12.12.2008

Описание переменных:

pole — массив, равный числу точек на экране; отвечает за расположение точки на экране

в той клетке массива, где расположена 1, на соответствующем месте экрана выводится точка,

ее координаты совпадают с расположением в массиве 1.

i,j,k — используются для организации циклов

xp, yp — текущие координаты точки x,y

flag — вспомогательный «флаг»

xcenter, ycenter — используются для заполнения массива pole

granx1, granx2 — соответственно верхняя и нижняя грани мнимой границы

grany1, grany2 — соответственно левая и правая грани мнимой границы

m — изначальное количество точек

nu — вспомогательная переменная

Константы:

cln — цвет точки «белый», для стирания ее на экране

clr — цвет точки «черный», для отображения ее на экране

}

program muravei;

uses crt,graphabc;

var pole:array [0..641,0..481] of integer;

i,j,k,xp,yp,flag,xcenter,ycenter,granx1,granx2,grany1,grany2,nu,m:integer;

const cln=clwhite;

clr=clblack;

{Процедура начала движения}

procedure BeginMove(n,xpoint,ypoint:integer);

begin

n:=random(4);      {Здесь выбирается с какой стороны экрана точка начнет свое движение, случайно}

case n of          {координата не должна попасть за мнимые грани}

0: yp:=grany1;

1: xp:=granx2;

2: yp:=grany2;

3: xp:=granx1;

end;

case n of          {Вычисление соответствующих координат, случайно}

0,2: xp:=trunc((granx2-granx1)*random+granx1);

1,3: yp:=trunc((grany2-grany1)*random+grany1);

end;

setpixel (xp,yp,clr);

end;

{Процедура движения точки}

procedure Moving (n,xpoint,ypoint:integer);

begin

setpixel (xp,yp,cln);

flag:=0;

repeat

{Условие не покидания мнимых границ}

if (xp<=granx2) and (xp>=granx1) and (yp>=grany1) and (yp<=grany2) then begin n:=random(4);           {Выбираем одну из 4 сторон куда будет двигаться точка} case n of 0: yp:=yp+1; 1: xp:=xp-1; 2: yp:=yp-1; 3: xp:=xp+1; end; flag:=0; if (xp>granx2) or (xpgrany2) then

begin

flag:=1;

if xp>granx2 then xp:=xp-1

else

if xpgrany2 then yp:=yp-1

else

if ypСоветую воспользоваться для правильной работы программы — PascalABC 3. Почему? О PascalABC

Ссылка для скачивания: Программа по построению кластера методом «Муравья»
Вернуться назад

Комментарии