2012-08-19 3 views
1

Я хотел бы иметь возможность узнать общую площадь, охватываемую областью (например, двойной интеграл по этой области). Я не могу найти какой-либо метод для этого, и мне интересно, будет ли я идти пополам. Спасибо заранее!Расчет общей площади региона

ответ

2

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

Рассуждение: в документах Andriod подразумевается, что при выполнении булевых операций в регионах область результатов представляет собой новый набор неперекрывающихся прямоугольников с желаемым объединением. Другими словами, A - B, где A и B являются прямоугольниками, в результате могут образовывать 0, 1, 2, 3 или 4 прямоугольника.

Я не тестировал, но источник на the Android xRef site показывает, что проверенная область состоит из прямоугольников без перекрытий.

+0

Спасибо за ответ. Регион сохраняется как регион Android, так как мне нужна его Op.DIFFERENCE и getBoundaryPath(). Я не уверен, могу ли я перебирать вершины. – scf

+0

Значит, это действительно набор возможных перекрывающихся прямоугольников? (Определение региона Android странно по сравнению с любым другим.) – Gene

+0

Я сейчас просто читаю его. Если бы они не перекрывали друг друга, было бы легко просто перебрать их. Может быть, мне придется использовать принцип исключения включения, хотя я бы предпочел метод, который не будет занимать много времени. – scf

1

Кажется, у меня такая же проблема, как и ваша проблема.

Я не уверен, если это «реальное» решение. Но я отправляю свой код. Значения выглядят нормально.

private void calculateArea(Region region) { 

     RegionIterator regionIterator = new RegionIterator(region); 

     int size = 0; // amount of Rects 
     float area = 0; // units of area 

     Rect tmpRect= new Rect(); 

     while (regionIterator.next(tmpRect)) { 
      size++; 
      area += tmpRect.width() * tmpRect.height(); 
     } 

     log.d("Rect amount=" + size); 
     log.d("Area Size/units of area=" + area); 
    } 

} 

Моя проблема в том, что я хочу получить размер области некоторых рисованных рисунков. Чтобы узнать о тротуарах, я добавил регион.

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