Re: Центр фигуры

From
Eugene Kilachkoff ()
To
Alexander Kolosov
Date
2002-11-24T22:39:11Z
Area
RU.ALGORITHMS
From: Eugene Kilachkoff <zeus@hippo.ru>

Alexander Kolosov пишет:
> Нужно определить координаты центра фигуры обозначенной единицами.
> Насколько я понял, нужно достроить фигуру до прямоугольника и найти
> пересечение его диагоналей. Какой алгоритм лучше использовать? 
Центры бывают разные. Зависит от задачи. То, что хочешь использовать 
даст тебе центр описывающего прямоугольника. Иногда может потребоваться 
найти центр масс или э-э-э.. не знаю как правильно назвать.. 
"геометрический центр".
В случае описывающего прямоугольника находишь max и min колонку и строку 
в которой еще есть единички. Потом xcenter=(xmax+xmin)/2, 
ycenter=(ymax+ymin)/2.

Центр масс считается так (sx,sy - размеры матрицы):
cx=cy=0;
for(i=0;i<sy;i++)
   for(j=0;j<sx;j++)
   {
     cx+=j*m[i][j];
     cy+=i*m[i][j];
   }
cx/=sx*(sx+1)/2;
cy/=sy*(sy+1)/2;

Если тебе нужно найти "геометрический центр", то все массы нужно считать 
за единицу, отсутствие ее за 0. Иными словами:
if ( m[i][j]>0 ) cx+1;

Вот на такой фигуре все три алгоритма дадут разный результат (нули 
заменены точками для наглядности):

............................
..933333333333333333333333..
..9B222.....................
..91111.C.....A.............
..91111.....................
..9111111111111111111111111.
............................

A - результат первого алгоритма, B - второго, C -третьего.




--- ifmail v.2.15dev5
 * Origin: home (2:5020/400)