2012-05-08 9 views
4

Я пытаюсь вычислить Площадь каждой ячейки Вороного в Matlab, но я застрял. Я нашел этот код на сайте:Рассчитать площадь ячейки Вороного

[v , c] = voronoin(sdata); 
for i = 1 : size(c ,1) 
    ind = c{i}'; 
    tess_area(i,1) = polyarea(v(ind,1) , v(ind,2)); 
end 

Этот код не работает, потому что одна из точек в v - [Inf, Inf]. Это точка в бесконечности. Как я могу обойти эту проблему?

ответ

4

В соответствии с примером в документации для «voronoin» первая точка v всегда будет [Inf, Inf]. Вот цитата:

Первая строка V - это бесконечная точка. Если какой-либо индекс в ячейке массив ячеек равен 1, то соответствующая ячейка Вороного содержит первую точку в V, бесконечную точку. Это означает, что ячейка Вороного является неограниченной.

Если вы хотите использовать «polyarea» на вершины V, не получая NaNs тогда мой наивный ответ отрубить первую строку V перед вводом его в «polyarea»:

sdata = [ 0.5 0 
     0  0.5 
    -0.5 -0.5 
    -0.2 -0.1 
    -0.1 0.1 
     0.1 -0.1 
     0.1 0.1 ] 
[v , c] = voronoin(sdata); 
for i = 1 : size(c ,1) 
    ind = c{i}'; 
    tess_area(i,1) = polyarea(v(2:end,1), v(2:end,2)) 
end 

Но если это не то, что вы подразумеваете под «нерабочим», то, возможно, вы можете подробнее рассказать о том, что вы ожидали увидеть?

1

это может избежать NaN вещи:.

 [ v, c] = voronoin (sdata); 
     tess_area=zeros(size(c,1),1); 

     for i = 1 : size(c ,1) 
      ind = c{i}'; 
     if ind~=1 
      tess_area(i,1) = polyarea(v(ind,1) , v(ind,2)); 
     end 
     end 
0

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

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

Если Matlab имеет функцию пересечения многоугольника, то это должно быть легко сделать. Некоторые соответствующие потоки могут быть:

intersection and union of polygons

What is an simple way to compute the overlap between an image and a polygon?

Если Matlab не имеет этого, вы можете вручную вычислить пересечение между Вороными линиями и линиями границ вашего многоугольника, а затем вычислить новый многоугольник, основанный на этом, из которого вы затем вычисляете область.

Смежные вопросы