Прошу в помощи в составлении алгоритма
От: azetown  
Дата: 21.02.12 08:55
Оценка:
Добрый день! Столкнулся с проблемой составления алгоритма прорисовки последовательной линии из массива.
Есть динамический массив mat[x][y]: real;

в него загружены определенные данные (результаты расчета зоны ограничения застройки ПКАЭМО 4.0) эти величины могут изменятся от 0 до определенной величины, причем если эта величина больше 1 то образуются некоторые замкнутые зоны различной формы,
мне необходимо найти и последовательно записать координаты точек перехода где эта величина изменяется с меньше 1 на 1 или больше единицы.

сам попробовал вот что вышло только работает коряво и обрисовывает только одну зону а зон может быть несколько даже в определенной зоне может быть еще одна зона перехода.

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



Прошу вашего совета в написании данного алгоритма!


for ix:= 0 to n_x do
begin
for iy:= 0 to n_y do
begin
if iy>0 then
// if ((mat[ix][iy-1]<=1)and(mat[ix][iy]>=1)) or ((mat[ix][iy]>=1)and(mat[ix][iy+1]<=1)) then
if ((mat[ix][iy-1]<=1)and(mat[ix][iy]>=1)) then
if b1 then kp1:=addMassKoord(kp1,form10.setPAC2D(x0+ix*dx,y0+iy*dy))
else begin
b1:=true;
kp1[0]:=x0+ix*dx;
kp1[1]:=y0+iy*dy;

end;
{ with Acb1.addline(form10.setpac(x0+ix*dx,y0+iy*dy,0),form10.setpac(x0+ix*dx,y0+iy*dy,0)) do
begin
color:=acByBlock;
Lineweight:=acLnWtByBlock;
end; }
end;
end;
Re: Прошу в помощи в составлении алгоритма
От: Аноним  
Дата: 21.02.12 09:35
Оценка:
Фактически у вас есть график функции f(x,y), и вам по нему надо сделать срез на уровне f(x,y) = 1.

Удобно рассматривать это как bitmap, где единичками заполнены все области >= 1, и нулями — все области < 1.
А дальше надо копать алгоритмы поиска контуров в изображениях. Хотя бы и здесь:

http://habrahabr.ru/tag/%D0%B2%D1%8B%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%BE%D0%BD%D1%82%D1%83%D1%80%D0%BE%D0%B2%20%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.